c# - recien - ¿Qué significa NaN para los dobles?
nan optipro 1 (5)
¿Cuál es la diferencia entre NaN
e Infinity
? ¿Cuándo aparece NaN
? ¿Qué es?
De Wikipedia :
En computación, NaN (No es un número) es un valor del tipo de datos numérico que representa un valor no definido o no representable, especialmente en los cálculos de punto flotante. El uso sistemático de NaNs fue introducido por el estándar de punto flotante IEEE 754 en 1985, junto con la representación de otras cantidades no finitas como infinitos.
Y desde MSDN :
Representa un valor que no es un número (NaN). Este campo es constante.
El valor de esta constante es el resultado de dividir cero por cero.
Esta constante se devuelve cuando el resultado de una operación no está definido.
Use IsNaN para determinar si un valor no es un número. No es posible determinar si un valor no es un número comparándolo con otro valor igual a NaN.
Donde como Infinity
( infinito positivo e infinito negativo ) es el resultado de una operación de punto flotante que causa un desbordamiento (por ejemplo, 3.0 / 0
).
Generalmente sucede cuando divide 0 por 0. Lea más aquí: MSDN
NaN significa "No es un número" y le dice que esta variable de tipo double no tiene ningún valor.
NaN significa "No es un valor numérico". Para evitar excepciones, puede usar IsNaN para determinar si un valor no es un número.
Infinity
es una construcción matemática:Por ejemplo, en el espacio euclidiano, la división a través del elemento nulo (cero en ese caso) debería producir Infinito:
1 / 0 = Infinity
Not a Number
oNaN
es una construcción computacional, que vino junto con analizadores y limitaciones programáticas, ya su salida se le puede asignar un significado diferente dependiendo de la función en cuestión.Por ejemplo, un resultado solo puede ser matemáticamente manejable utilizando un sistema numérico diferente , lo que es fácil de hacer para un matemático, pero en su función puede quedar como la única opción pragmática para devolver
NaN
. Considera, la raíz cuadrada de-1
:sqrt(-1) = NaN
... una operación que es fácilmente manejable en el
phase space
complex
y dephase space
.
Experimento
Abra la JavaScript.Console (CTRL + SHIFT + J) en su navegador y escriba
>>> 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
En C #, las "situaciones NaN" típicas se manejan principalmente a través de Excepciones:
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
Lenguajes dinámicos mecanografiados :
En general, el uso de NaN
se asigna de manera flexible en diferentes lenguajes de programación. El uso de NaN
en la pérdida de cierta ''información contextual'', es conveniente en los lenguajes de scripting tipificados dinámicamente, donde los programadores generalmente no quieren molestarse con los complejos tipos de excepciones y su manejo.