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

Почему math.Ceiling(double a) не возвращает int напрямую?

Возможный дубликат:
Почему Math.Round/Floor/Ceiling не возвращает long или int?

msdn определяет этот метод: возвращает наименьшее целое число, большее или равное указанному числу с плавающей запятой с двойной точностью.

но на самом деле это

public static double Ceiling (
    double a
)

Почему бы не вернуть int напрямую? что думает microsoft?

4b9b3361

Ответ 1

Это потому, что диапазон a double (± 5.0 × 10 -324 до ± 1.7 × 10 308) намного больше, чем диапазон a int (-2,147,483,648 до 2,147,483,647). Если тип возврата был int, многие возможные входы потерпели бы неудачу. Например, Math.Ceiling может быть принудительно выбросить OverflowException в checked или может даже вернуть неверный результат в неконтролируемый контекст. Это нежелательное поведение.

Также некоторые специальные значения, такие как NaN и PositiveInfinity, могут быть возвращены этим методом, Это возможно только в том случае, если тип возврата double.

Если вы считаете, что результат будет вписываться в int, вы можете добавить явное выражение:

int result = (int)Math.Ceiling(a);