Java isNan comment cela fonctionne?
J'ai été à la recherche à la openjdk-1.7.0_25
code source et j'ai vu cette méthode:
/**
* Returns {@code true} if the specified number is a
* Not-a-Number (NaN) value, {@code false} otherwise.
*
* @param v the value to be tested.
* @return {@code true} if the argument is NaN;
* {@code false} otherwise.
*/
static public boolean isNaN(float v) {
return (v != v);
}
Je ne peux pas comprendre comment il fonctionne, lorsque cette méthode peut retourner true
?
source d'informationauteur rascio
Vous devez vous connecter pour publier un commentaire.
Cette méthode peut retourner vrai pour certaines opérations, par exemple:
Fondamentalement,
NaN
représente une valeur non définie. La valeur de0.0 /0.0
estNaN
etNan != NaN
. Il peut sembler logique, parce queMath.sqrt(-1)
vous donne égalementNaN
.Voir la javadoc de
Double.NaN
:Et puis
Double.longBitsToDouble()
:De Java Langage De Spécification:
Parce que NaN compare faux avec lui-même. Donc, il va retourner la valeur true lorsque vous passez
NaN
à la méthode.Source
Pas seulement à propos de Java, C'est également vrai pour toutes les langues à la suite de la norme IEEE754.
Liés à la question : Pourquoi ne Double.NaN==Double.NaN return false?
Simple..
Nan
est toujours !=NaN
ces valeurs ne sont pas égales à quoi que ce soit. Voir cette:Afin de tester si
v != v
est suffisant pour dire si levalue
estNaN
ou pas.Autant que je sache NaN valeur n'est pas égal à rien.Alors, quand vous avez passé
float v
,Il n'est jamais pas égale à elle-même.