【发布时间】:2011-02-10 08:40:31
【问题描述】:
sun jdk 实现如下:
return v != v;
谁能解释一下它是如何工作的?
【问题讨论】:
标签: java floating-point double nan
sun jdk 实现如下:
return v != v;
谁能解释一下它是如何工作的?
【问题讨论】:
标签: java floating-point double nan
nan 是唯一不等于自身的 double。因此,检查 v!=v 只会为 NaN 生成 True。
这是Java spec 必须说的话:
浮点运算符不产生 例外(§11)。一个操作 溢出产生有符号无穷大, 下溢的操作产生 非规格化值或有符号零, 和一个没有 数学上确定的结果 产生 NaN。所有数值运算 以 NaN 作为操作数产生 NaN 为 结果。 就像以前一样 描述,NaN 是无序的,所以 数值比较运算涉及 一个或两个 NaN 返回 false 和 any != 涉及 NaN 返回的比较 true,当 x 为 NaN 时包括 x!=x。
【讨论】:
NaN 值不等于任何值(如果等式的一侧是 NaN,则等式为假),因此 NaN != NaN。显然每个正常的双精度都等于它自己
【讨论】: