Quelle est la différence entre NaN
et Infinity
? Quand NaN
apparaît-il? Qu'Est-ce que c'est?
De Wikipedia :
En informatique, NaN (Not a Number) est une valeur de type numérique représentant une valeur indéfinie ou non représentable, en particulier dans les calculs à virgule flottante. L'utilisation systématique des NaN a été introduite par la norme à virgule flottante IEEE 754 en 1985, ainsi que la représentation d'autres quantités non finies comme les infinis.
Et à partir de MSDN :
Représente une valeur qui n'est pas un nombre (NaN). Ce champ est constant.
La valeur de cette constante est le résultat de la division de zéro par zéro.
Cette constante est renvoyée lorsque le résultat d'une opération n'est pas défini.
Utilisez IsNaN pour déterminer si une valeur n'est pas un nombre. Il n'est pas possible de déterminer si une valeur n'est pas un nombre en la comparant à une autre valeur égale à NaN.
Où comme Infinity
( infini positif et infini négatif ) est le résultat d'une opération en virgule flottante qui provoque un débordement (par exemple 3.0 / 0
).
Infinity
est une construction mathématique:
Par exemple, dans l'espace euclidien, la division à travers l'élément nul (zéro dans ce cas) devrait produire Infinity:
1 / 0 = Infinity
Not a Number
ou NaN
est une construction de calcul, accompagnée d'analyseurs et de limitations programmatiques, et sa sortie peut recevoir une signification différente selon la fonction Dans la question.
Par exemple, un résultat ne peut être traité mathématiquement qu'en utilisant un système numérique différent , ce qui est facile à faire pour un mathématicien, mais dans votre fonction, vous pouvez être laissé comme seule option pragmatique pour renvoyer NaN
. Considérez, la racine carrée de -1
:
sqrt(-1) = NaN
... une opération facilement traitable dans complex
et phase space
.
Expérience:
Ouvrez la JavaScript.Console (CTRL + SHIFT + J) dans votre navigateur et tapez
>>> 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 #, les "situations NaN" typiques sont principalement gérées par le biais d'exceptions:
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
Langages typés dynamiques:
Dans l'ensemble, l'utilisation de NaN
est attribuée de manière quelque peu flexible dans différents langages de programmation. L'utilisation de NaN
à la perte de certaines "informations contextuelles", est pratique dans les langages de script à typage dynamique, où les programmeurs ne veulent généralement pas se soucier des types d'exceptions complexes et leur manipulation.
Cela se produit généralement lorsque vous divisez 0 par 0. Pour en savoir plus, cliquez ici: http://msdn.Microsoft.com/en-us/library/system.double.nan.aspx
vérifier si le double a une valeur, sinon retourner 0
if (double.Equals(double.NaN, myValue))
myValue= 0;
NaN signifie "Pas une valeur numérique". Pour éviter les exceptions, vous pouvez utiliser IsNaN pour déterminer si une valeur n'est pas un nombre.
NaN signifie "Pas un nombre" et vous indique que cette variable de type double n'a aucune valeur.