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

Почему Math.Ceiling возвращает double?

В С# метод Math.Ceiling возвращает значение double. Почему он не возвращает int?

4b9b3361

Ответ 1

В документации говорится о возвращаемом значении:

Наименьшее целое число, большее или равное a. Если a равно NaN, NegativeInfinity или PositiveInfinity, это значение возвращается.

Поэтому возвращаемое значение должно быть двойным, так как NaN, NegativeInfinity и PositiveInfinity являются полями Double.

Ответ 2

double имеет больший диапазон значений, чем int:

Тип двойного значения представляет собой 64-битное число с двойной точностью с значения от отрицательных 1.79769313486232e308 - положительный 1.79769313486232e308, а также положительный или отрицательный ноль, PositiveInfinity, NegativeInfinity, и Not-a-Number (NaN).

Двойной соответствует требованиям IEC 60559: 1989 (IEEE 754) для двоичная арифметика с плавающей запятой.

В этом стандарте говорится, что double имеет 52-битную мантиссу, что означает, что он может представлять любое целое число до 52 бит в длину без потери точности.

Поэтому, если вход достаточно велик, вывод не помещается внутри int (который имеет только 32 бита).

Ответ 3

Math.Ceiling может возвращать либо double, либо decimal, в зависимости от типа, переданного в. Другими словами, тип вывода метода соответствует типу ввода (довольно разумно).

Они могли бы добавить третью перегрузку, которая берет int и возвращает int, но не было бы большого смысла в этом - функция всегда возвращала бы свой вход.

Предполагается, что целью Math.Ceiling является присвоение значения с плавающей запятой целому числу, но обычно это не так.

Ответ 4

Он должен возвратиться дважды, чтобы быть полным. Любая математическая операция с использованием NaN всегда возвращает NaN. Таким образом, если вы передадите функцию NaN to ceiling(), то нельзя было бы вернуть NaN, так как в Int нет эквивалента. Также, учитывая, что Double имеет более широкий диапазон, что бы вернуть для тех значений, которые находятся вне допустимого диапазона? Что возвращается для +/- inf?

Ответ 5

Потому что double может содержать большее число, чем int или long. По той же причине нет неявного перевода из double в int.