Java 为什么Float.NaN==Float.NaN为false

Java 为什么Float.NaN==Float.NaN为false,java,Java,为什么Float.NaN==Float.NaN给出false?我已经在多个JVM上测试了它 感谢您的帮助 System.out.println(Float.NaN == Float.NaN); // gives false 这不是Java特有的 根据合同,IEEE754不等于任何数量,甚至不等于它们自己 但谷歌搜索还不够……我想从我的脑海中找出原因,NaN被指定为不等于任何其他数字。(或者,事实上,不可压缩,但=不能表达这一点。)这难道不是检测NaN的最简单方法吗?如果数字本身不是NaN?

为什么
Float.NaN==Float.NaN
给出
false
?我已经在多个JVM上测试了它

感谢您的帮助

  System.out.println(Float.NaN == Float.NaN); // gives false

这不是Java特有的


根据合同,IEEE754不等于任何数量,甚至不等于它们自己

但谷歌搜索还不够……我想从我的脑海中找出原因,
NaN
被指定为不等于任何其他数字。(或者,事实上,不可压缩,但
=
不能表达这一点。)这难道不是检测NaN的最简单方法吗?如果数字本身不是NaN?@TobiasLangner如维基百科所说:“等式和不等式谓词是非信号的,因此x=x返回false可以用来测试x是否是一个安静的NaN”。但是在您的代码中,最清晰的是使用
Float.isNaN