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
при потере некоторой «контекстной информации» удобно в динамически типизированных языках сценариев, где программисты обычно не хотят беспокоиться о сложных типах исключений и их обработке.