Подтвердить что ты не робот

Почему round() и ceil() не возвращают целое число?

Время от времени я нахожу, что округляю некоторые числа, и мне всегда приходится приводить результат к целому числу:

int rounded = (int) floor(value);

Почему все функции округления (ceil(), floor()) возвращают плавающее число, а не целое число? Я нахожу это довольно неинтуитивным и хотел бы получить некоторые объяснения!

4b9b3361

Ответ 1

Интегральное значение, возвращаемое этими функциями, может быть слишком большим для хранения в целочисленном типе (int, long и т.д.). Чтобы избежать переполнения, которое приведет к результатам undefined, приложение должно выполнить проверку диапазона возвращаемого значения перед назначением целочисленного типа.

на странице ceil (3) Linux man.

Ответ 2

Это потому, что диапазон float шире int. Что бы вы ожидали, если значение, возвращаемое этими функциями, не входило в int? Это будет undefined поведение, и вы не сможете проверить это в своей программе.