documentation for java.lang.Double.NaN
说是
A constant holding a Not-a-Number (NaN) value of type
double
. It is equivalent to the value returned byDouble.longBitsToDouble(0x7ff8000000000000L)
.
这似乎暗示还有其他的。如果是这样,我如何获得它们,这是否可以便携地完成?
明确地说,我想找到 double
值 x
使得
Double.doubleToRawLongBits(x) != Double.doubleToRawLongBits(Double.NaN)
和
Double.isNaN(x)
都是真的。
最佳答案
您需要 doubleToRawLongBits
而不是 doubleToLongBits
。
doubleToRawLongBits
提取实际的二进制表示。 doubleToLongBits
没有,它首先将所有 NaN
转换为默认的 NaN
。
double n = Double.longBitsToDouble(0x7ff8000000000000L); // default NaN
double n2 = Double.longBitsToDouble(0x7ff8000000000100L); // also a NaN, but M != 0
System.out.printf("%X\n", Double.doubleToLongBits(n));
System.out.printf("%X\n", Double.doubleToRawLongBits(n));
System.out.printf("%X\n", Double.doubleToLongBits(n2));
System.out.printf("%X\n", Double.doubleToRawLongBits(n2));
输出:
7FF8000000000000
7FF8000000000000
7FF8000000000000
7FF8000000000100
关于java - 其他 NaN 值是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2154484/