10
votes

Quelles sont les autres valeurs NAN?

the Documentation pour Java .lang.double.nan dit que c'est

Une constante tenant une valeur non-A-numéro (NAN) de type double . Il est équivalent à la valeur renvoyée par double.LongBittstOdouble (0x7FF800000000000000L) .

Cela semble impliquer qu'il y en a d'autres. Si oui, comment puis-je les saisir et cela peut-il être fait de manière portante?

Pour être clair, je souhaite trouver les valeurs double x tel que xxx

et xxx

est à la fois vrai.


2 commentaires

Voulez-vous dire existe-t-il d'autres java.lang. *. Nan ?


@Dominic: Non - j'ai ajouté ce que je pense être une clarification à la question.


3 Réponses :


3
votes

IEEE 754 Définit une NAN comme numéro avec tous les bits d'exposant qui sont 1 et un numéro non nul dans la mantissie.

Donc pour un numéro de précision que vous recherchez: < / p> xxx

java gère cela comme: xxx

à somme, vous pouvez utiliser n'importe quel Nan que vous voulez, qui est conforme aux règles susmentionné (tous les bits 1 en exposant et mantissa! = 0).


4 commentaires

La dernière déclaration n'a aucun sens. double.doubletolongbits (...) est un long , qui est implicitement converti en double , autoboxé et comparé par référence à n2 .


Peut-être dans la dernière ligne doit être double.doubletolongits (N2)! = Double.doubletolongbits (double.nan) ?


Cette impression false , car doubletétolonflits convertit tout nan s sur la même valeur. Mais c'est vrai si vous utilisez doublettorawlongbits .


J'avais tort de la comparaison de référence (je viens de regarder le bytecode.) Le long est converti en double , mais n2 est auto-non-Boxed et la normale double est appliquée.



7
votes

Java utilise IEEE 754 pour ses numéros de points flottants et suit donc leurs règles.

Selon le Page Wikipedia sur Nan Il est défini comme ceci:

Un exemple bit-sage d'un point de précision standard de point de flottation IEEE NaN: x111 1111 1Axx xxxx xxxx xxxx xxxx xxxx x signifie pas CARE .

Donc, il y a tout à fait quelques motifs de bit qui sont tous NAN valeurs.


4 commentaires

Merci. Est-ce garanti pour être portable entre VMS?


@simonn: Cette question me ferait arrêter un instant: comment voulez-vous utiliser exactement ce fait? Essayez-vous de soumettre des informations en bande à l'intérieur de la valeur NAN d'un double ?


Sorte de. J'essaie d'imiter la sémantique d'un système où il existe plusieurs valeurs différentes qui agissent comme Nan, mais elles sont distinguables.


Juste comme une note latérale: j'ai depuis appris que distinguer différents valeurs NAN est non portable en Java. Certaines implémentations peuvent l'appuyer, d'autres peuvent réduire toutes les valeurs nan à un petit ensemble de "LEGIT". Cela peut arriver à tout temps, y compris les affectations simples .



12
votes

Vous avez besoin doublettorawlongbits plutôt que doubletétolonflits .

DoubleTorwlongbits extrait la représentation binaire réelle. DoubleToLonflits ne convertit pas, il convertit tout nan s vers le nan d'abord. xxx < p> sortie: xxx


1 commentaires

Merci pour la pointe sur doublettorawlongbits !