Was sind die anderen NaN-Werte?

8

Die Dokumentation für java.lang.Double.NaN sagt das ist

  

Eine Konstante, die einen Not-a-Number (NaN) -Wert vom Typ double enthält. Dies entspricht dem von Double.longBitsToDouble(0x7ff8000000000000L) zurückgegebenen Wert.

Dies scheint zu implizieren, dass es andere gibt. Wenn ja, wie bekomme ich sie, und kann dies portabel gemacht werden?

Um klar zu sein, möchte ich die double -Werte x so finden, dass

%Vor%

und

%Vor%

sind beide wahr.

    
Simon Nickerson 28.01.2010, 12:36
quelle

3 Antworten

8

Sie benötigen doubleToRawLongBits anstatt doubleToLongBits .

doubleToRawLongBits extrahiert die tatsächliche binäre Darstellung. doubleToLongBits nicht, es konvertiert alle NaN s in den Standard NaN zuerst.

%Vor%

Ausgabe:

%Vor%     
finnw 28.01.2010, 13:54
quelle
6

Java verwendet IEEE 754 für seine Fließkommazahlen und folgt daher deren Regeln.

Laut der Wikipedia-Seite auf NaN ist dies folgendermaßen definiert:

  

Ein bitweises Beispiel eines IEEE-Gleitkomma-Standards mit einfacher Genauigkeit NaN: x111 1111 1axx xxxx xxxx xxxx xxxx xxxx wobei x egal bedeutet.

Es gibt also einige Bitmuster, die NaN -Werte sind.

    
Joachim Sauer 28.01.2010 12:40
quelle
2

IEEE 754 definiert ein NaN als eine Zahl mit allen Exponentenbits, die 1 und eine Zahl ungleich null in der Mantisse sind.

Sie suchen also nach einer Nummer mit einfacher Genauigkeit:

%Vor%

Java behandelt dies wie folgt:

%Vor%

Als Summe können Sie ein beliebiges NaN verwenden, das den oben genannten Regeln entspricht (alle Bits 1 in Exponent und Mantisse! = 0).

    
Yuval Adam 28.01.2010 12:39
quelle

Tags und Links