Java指定浮点数遵循
IEEE 754标准。
这是它的存储方式:
>位0:符号位
>位1到11:指数
>位12到63:分数
现在,我已经执行下面的方法与不同的double值:
public static void print(double d){
System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(d)));
}
我用这些值执行:
print(Double.NaN);
print(Double.NEGATIVE_INFINITY);
print(Double.POSITIVE_INFINITY);
print(-Double.MAX_VALUE);
print(Double.MAX_VALUE);
并获得以下输出的值(格式化为可读性):
NaN: 0111111111111000000000000000000000000000000000000000000000000000
-Inf: 1111111111110000000000000000000000000000000000000000000000000000
+Inf: 0111111111110000000000000000000000000000000000000000000000000000
-Max: 1111111111101111111111111111111111111111111111111111111111111111
+Max: 0111111111101111111111111111111111111111111111111111111111111111
Wikipedia explains当指数字段是全位1时,数字是Inf或NaN。 Inf具有尾数零的所有位; NaN的尾数中至少有一位设置为1.符号位保留其对Inf的正常含义,但对NaN无意义。 Java的Double.NaN是一个特定的值,将被解释为NaN,但有253-3其他。