Самый короткий способ проверить, является ли Double "NaN"
При вызове Double.IsNaN()
с Double.PositiveInfinity
в качестве аргумента результат равен false. Это противоречит моей интуиции, так как бесконечность не является числом. По-видимому, "NaN" существует только в терминах константы в .NET, описывается ли это стандартом IEEE или представляет собой детальную реализацию реализации? Есть ли более короткий способ проверить, является ли Double
"NaN", чем:
(Double.IsNaN(d) || Double.IsPositiveInfinity(d) || Double.IsNegativeInfinity(d))
или
(Double.IsNaN(d) || Double.IsInfinity(d))
Ответы
Ответ 1
Как говорит MSDN, NaN означает, что результат undefined. С определением бесконечности определяется:
Метод или оператор возвращает NaN, когда результат операции undefined. Например, результат деления нуля на ноль равен NaN, так как показан следующий пример. (Но учтите, что деление ненулевого числа ноль возвращает либо PositiveInfinity, либо NegativeInfinity, в зависимости от на знак дивизора.)
Итак, это нехорошо продумать бесконечность как NaN. Вы можете написать метод расширения, чтобы проверить, не значение NaN или бесконечность:
// Or IsNanOrInfinity
public static bool HasValue(this double value)
{
return !Double.IsNaN(value) && !Double.IsInfinity(value);
}
Ответ 2
В Double
есть три специальных значения, которые основаны на стандарте IEEE 754. Один из них - "Положительная бесконечность", другой - "Отрицательная бесконечность", а "Not-a-Number" (NaN). Все, что делает метод Double.IsNaN
, это проверка, чтобы увидеть, является ли значение в переменной этим специальным значением NaN.