Double.isNaN()如何工作?

时间:2010-04-20 21:59:49

标签: java floating-point double nan

sun jdk实现如下所示:

return v != v;

任何人都能解释一下这是如何运作的吗?

2 个答案:

答案 0 :(得分:13)

NaN值不等于任何值(如果等式的一边是NaN,则等式为假),所以NaN!= NaN。显然,每个正常的双重确实相等

答案 1 :(得分:4)

纳米是唯一不等于自身的双倍。因此,检查v!= v将仅为NaN生成True。

以下是Java spec所说的内容:

  

浮点运算符不产生   例外(§11)。一个操作   溢出产生有符号的无穷大,   下溢产生的操作   非规格化值或有符号零,   和一个没有的操作   数学上确定的结果   产生NaN。所有数字操作   用NaN作为操作数产生NaN作为   结果。 一如既往   描述,NaN是无序的,所以a   数字比较操作涉及   一个或两个NaN返回false和any   !=涉及NaN回报的比较   是的,包括x!= x,当x是NaN时。