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

Что означает NaN для удвоений?

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

4b9b3361

Ответ 1

От Wikipedia:

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

И из MSDN:

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

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

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

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

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

Ответ 2

  • Infinity - математическая конструкция:

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

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

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

    sqrt(-1) = NaN
    

    ... операция, которая легко обрабатывается в complex и phase space.

Эксперимент

Откройте 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

В С# типичные "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

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

Ответ 5

NaN означает "Не число" и сообщает, что эта переменная типа double не имеет значения.

Ответ 6

проверьте, имеет ли значение double, если нет, то верните 0

if (double.Equals(double.NaN, myValue))
    myValue= 0;