int i = 0, j = 0;
double nan1 = (double)0/0;
double nan2 = (double)0/0;
double nan3 = (double)i/j;
System.out.println(Double.doubleToRawLongBits(nan1) == Double.doubleToRawLongBits(nan2));
System.out.println(Double.doubleToRawLongBits(nan1) == Double.doubleToRawLongBits((double)0/0));
System.out.println(Double.doubleToRawLongBits(nan3) == Double.doubleToRawLongBits(nan2));
輸出:迷惑,對楠的Java
true
true
false
請幫我如何輸出的前兩個和false
的最後一個來到true
。請告訴我什麼是Double.doubleToRawLongBits()方法的實際工作。
有兩種不同的'NaN'正在生產。一個是「0x7ff8000000000000」,另一個是「0xfff8000000000000」。硬件似乎爲'0/0'提供'0xfff8000000000000'。但編譯器的常量傳播使用的是「0x7ff8000000000000」。除非我忽略了一些東西,這對我來說就像是一個bug。 – Mysticial
如果你爲該方法啓用'strictfp'會怎麼樣? – Joey
此外:»在符合IEEE 754標準的浮點存儲格式中,NaN由NaN特有的特定預定義位模式標識。標誌位無關緊要。«([Wikipedia](http://en.wikipedia.org/wiki/NaN#Encoding)) – Joey