sun jdk实现如下所示:
return v != v;
任何人都能解释一下这是如何运作的吗?
答案 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时。