rob*_*ock 39 java nan infinity
据我所知,java将存储器作为32位整数存储在内存中,具有以下属性:
这样就不会为三种特殊情况留下任何备用位:
我猜可以用负0来存储其中一个.
这些实际上如何在记忆中表现出来?
Dar*_*hta 57
Java指定浮点数遵循IEEE 754标准.
这就是它的存储方式:
现在,我已经使用不同的double值执行了以下方法:
public static void print(double d){
System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(d)));
}
Run Code Online (Sandbox Code Playgroud)
我执行了这些值:
print(Double.NaN);
print(Double.NEGATIVE_INFINITY);
print(Double.POSITIVE_INFINITY);
print(-Double.MAX_VALUE);
print(Double.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
并获得上述值的以下输出(格式化为可读性):
NaN: 0111111111111000000000000000000000000000000000000000000000000000
-Inf: 1111111111110000000000000000000000000000000000000000000000000000
+Inf: 0111111111110000000000000000000000000000000000000000000000000000
-Max: 1111111111101111111111111111111111111111111111111111111111111111
+Max: 0111111111101111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
维基百科解释说,当指数字段为全位-1时,该数字为Inf或NaN.Inf具有尾数零的所有位; NaN在尾数中至少有一位设置为1.符号位保留其对于Inf的正常含义,但对NaN没有意义.Java Double.NaN是一个特定的值,将被解释为NaN,但还有2 53 -3个其他值.
Rah*_*thi 17
从这里:
问:使用IEEE 754如何表示零,无穷大和NaN?
A.通过将所有指数位设置为1.正无穷大= 0x7ff0000000000000(所有指数位1,符号位0和所有尾数位0),负无穷大= 0xfff0000000000000(所有指数位1,符号位1和所有尾数位0) ,NaN = 0x7ff8000000000000(所有指数位1,至少一个尾数位设置).正零=所有位0.负零=所有位0,除了符号位1.
另请参阅Javadocs有关NAN,正无穷大和负无穷大的信息.
| 归档时间: |
|
| 查看次数: |
7108 次 |
| 最近记录: |