Le soleil mise en œuvre de jdk ressemble à ceci:Comment fonctionne Double.isNaN()?
return v != v;
Quelqu'un peut-il expliquer comment cela fonctionne?
Le soleil mise en œuvre de jdk ressemble à ceci:Comment fonctionne Double.isNaN()?
return v != v;
Quelqu'un peut-il expliquer comment cela fonctionne?
Les valeurs NaN ne sont égales à rien (si un côté d'une égalité est NaN, l'égalité est fausse), donc NaN! = NaN. Évidemment, chaque double normal est égal
Un nan est le seul double qui ne soit pas égal à lui-même. Ainsi, vérifier v! = V ne produira que True pour NaN.
Voici ce que le Java spec a à dire:
opérateurs à virgule flottante ne produisent pas exceptions (§11). Une opération qui déborde produit un débordement signé, une opération qui produit des sousverses une valeur dénormalisé ou un signe égal à zéro, et une opération qui n'a aucun résultat mathématiquement définie produit NaN. Toutes les opérations numériques avec NaN en tant qu'opérande produisent NaN en tant que résultat . Comme cela a déjà été décrit , NaN est non ordonnée, donc une opération de comparaison numérique impliquant un ou deux NaN retourne false et tout! = Comparaison impliquant NaN retourne vrai, y compris x! = X lorsque x est NaN.