Java Double.isNaN()如何工作?

Java Double.isNaN()如何工作?,java,floating-point,double,nan,Java,Floating Point,Double,Nan,sun jdk实现如下所示: return v != v; 有人能解释它是如何工作的吗?NaN值不等于任何值(如果等式的一侧为NaN,则等式为false),所以NaN!=楠。显然,每一个正常的双精度都等于它自己nan是唯一不等于它自己的双精度。因此,检查v=v只会为NaN生成True 以下是政府必须说的话: 浮点运算符不会产生任何错误 例外情况(§11)。手术 溢出产生有符号的无穷大, 产生下溢的操作 非规范化值或有符号零, 还有一个没有 数学上确定的结果 产生NaN。所有数值运算 使用NaN

sun jdk实现如下所示:

return v != v;

有人能解释它是如何工作的吗?

NaN值不等于任何值(如果等式的一侧为NaN,则等式为false),所以NaN!=楠。显然,每一个正常的双精度都等于它自己

nan是唯一不等于它自己的双精度。因此,检查v=v只会为NaN生成True

以下是政府必须说的话:

浮点运算符不会产生任何错误 例外情况(§11)。手术 溢出产生有符号的无穷大, 产生下溢的操作 非规范化值或有符号零, 还有一个没有 数学上确定的结果 产生NaN。所有数值运算 使用NaN作为操作数生成NaN作为 结果如前所述 描述,楠是无序的,所以 数字比较运算 一个或两个NAN返回false,任何 != 涉及NaN回报的比较 是的,包括x=x为NaN时为x。