что значит NaN для двойников? - PullRequest
23 голосов
/ 13 ноября 2011

В чем разница между NaN и Infinity? Когда появляется NaN? Что это?

Ответы [ 5 ]

26 голосов
/ 13 ноября 2011

Из Википедия :

В вычислениях NaN (не число) - это значение числового типа данных, представляющее неопределенное или непредставляемое значение, особенно в вычислениях с плавающей запятой. Систематическое использование NaN было введено стандартом IEEE 754 с плавающей точкой в ​​1985 году наряду с представлением других неконечных величин, таких как бесконечности.

И от MSDN :

  • Представляет значение, которое не является числом (NaN). Это поле является постоянным.

  • Значение этой константы является результатом деления нуля на ноль.

  • Эта константа возвращается, когда результат операции не определен.

  • Используйте IsNaN, чтобы определить, является ли значение не числом. Невозможно определить, является ли значение не числом, сравнивая его с другим значением, равным NaN.

Где как Infinity ( положительная бесконечность и отрицательная бесконечность ) - результат операции с плавающей запятой, которая вызывает переполнение (например, 3.0 / 0).

10 голосов
/ 24 сентября 2012
  • Infinity является математической конструкцией:

    Например, в евклидовом пространстве деление на нулевой элемент (в данном случае ноль) должно давать бесконечность:

    1 / 0 = Infinity
    
  • Not a Number или NaN - это вычислительная конструкция, которая сопровождается синтаксическими анализаторами и программными ограничениями, и ее выводу может быть присвоено различное значение в зависимости от функции обсуждаемый.

    Например, результат может быть математически обработан только с использованием другой системы счисления , что легко сделать для математика, но в вашей функции вы можете остаться единственным прагматическим вариантомвернуть NaN.Рассмотрим квадратный корень из -1:

    sqrt(-1) = NaN
    

    ... операция, которую легко можно отследить в complex и phase space.

Experiment :

Откройте JavaScript.Console (CTRL + SHIFT + J) в вашем браузере и введите

>>> Math.sqrt(-1)
NaN

>>> 1/0
Infinity

>>> Number.MAX_VALUE
1.7976931348623157e+308

>>> Number.MAX_VALUE *2
Infinity

>>> parseFloat("I am not a Number")
NaN

В C # типичные «NaN-ситуации»в основном обрабатываются через исключения:

csharp> Int64.MaxValue;
9223372036854775807
csharp> Int64 i_64 = Int64.MaxValue;
//the number will overflow into the sign-bit
csharp> i_64 +=1;
//...or similarly with Doubles...
csharp> Double.MaxValue;
1.79769313486232E+308

//following, an exception is thrown before overflowing
csharp> Int64 i_64 = Int64.MaxValue+1;
{interactive}(1,29): error CS0220: The operation overflows at compile time in ch
ecked mode

Языки с динамической типизацией :

В целом, использование NaN несколько гибко назначается в разных языках программирования.Использование NaN при потере некоторой «контекстной информации» удобно в динамически типизированных языках сценариев, где программисты обычно не хотят беспокоиться о сложных типах исключений и их обработке.

4 голосов
/ 13 ноября 2011

Обычно происходит, когда вы делите 0 на 0. Подробнее здесь: http://msdn.microsoft.com/en-us/library/system.double.nan.aspx

1 голос
/ 13 ноября 2011

NaN означает «Не число» и говорит вам, что эта переменная типа double не имеет никакого значения.

1 голос
/ 13 ноября 2011

NaN означает «Не число». Чтобы избежать исключений, вы можете использовать IsNaN, чтобы определить, является ли значение не числом.

...