sun jdk 实现如下所示:
return v != v;
谁能解释它是如何工作的?
NaN 值不等于任何值(如果等式的一侧是 NaN,则等式为假),因此 NaN != NaN。显然每个正常的双精度都等于它自己
nan 是唯一不等于自身的 double。因此,检查 v!=v 只会为 NaN 生成 True。
这是Java 规范必须说的:
浮点运算符不会产生异常(§11)。上溢运算产生有符号无穷大,下溢运算产生非规格化值或有符号零,而没有数学确定结果的运算产生 NaN。所有以 NaN 作为操作数的数值运算都会产生 NaN 作为结果。如前所述,NaN 是无序的,因此涉及一个或两个 NaN 的数值比较操作返回 false,任何涉及 NaN 的 != 比较都返回 true,包括当 x 为 NaN 时的 x!=x。