Почему round() и ceil() не возвращают целое число?
Время от времени я нахожу, что округляю некоторые числа, и мне всегда приходится приводить результат к целому числу:
int rounded = (int) floor(value);
Почему все функции округления (ceil()
, floor()
) возвращают плавающее число, а не целое число? Я нахожу это довольно неинтуитивным и хотел бы получить некоторые объяснения!
Ответы
Ответ 1
Интегральное значение, возвращаемое этими функциями, может быть слишком большим для хранения в целочисленном типе (int, long и т.д.). Чтобы избежать переполнения, которое приведет к результатам undefined, приложение должно выполнить проверку диапазона возвращаемого значения перед назначением целочисленного типа.
на странице ceil (3) Linux man.
Ответ 2
Это потому, что диапазон float
шире int
. Что бы вы ожидали, если значение, возвращаемое этими функциями, не входило в int
? Это будет undefined поведение, и вы не сможете проверить это в своей программе.