shr*_*000 28 java floating-point comparison nan
为什么这种比较会让我"假"?我查看了源代码并将Float.NaN定义为
/**
* A constant holding a Not-a-Number (NaN) value of type
* <code>float</code>. It is equivalent to the value returned by
* <code>Float.intBitsToFloat(0x7fc00000)</code>.
*/
public static final float NaN = 0.0f / 0.0f;
Run Code Online (Sandbox Code Playgroud)
编辑:令人惊讶的是,如果我这样做:
System.out.println("FC " + (Float.compare(Float.NaN, Float.NaN)));
Run Code Online (Sandbox Code Playgroud)
它给了我0.因此,Float.compare()不认为NaN的是等于本身!
Voo*_*Voo 35
因为Java实现了IEEE-754浮点标准,它保证任何比较NaN都将返回false(除了!=返回true)
这意味着,您无法以通常的方式检查浮点数是否为NaN,因此您可以将这两个数字重新解释为整数并进行比较或使用更聪明的解决方案:
def isNan(val):
return val != val
Run Code Online (Sandbox Code Playgroud)