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

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

5 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам