java - 其他 NaN 值是什么?

标签 java floating-point ieee-754 nan

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 by Double.longBitsToDouble(0x7ff8000000000000L).

这似乎暗示还有其他的。如果是这样,我如何获得它们,这是否可以便携地完成?

明确地说,我想找到 doublex 使得

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/

相关文章:

检查整个多行 HTML header 时 HTML 状态代码的 Java 正则表达式

c++ - 将 double 的位模式显示为十六进制?

python - 用python从二进制文件中读取32位带符号的ieee 754 float ?

c - 使用浮点二进制的算术运算 "0b"

java - IEEE 754 和语言之间的值范围

java - 更新 JDBC 数据源 URL 的 WLST 命令

java - 无需代理直接连接到互联网

java - 优化 Java 代码的技巧

c - 被低估的浮点因子

c++ - 非恢复浮点平方根算法