代码之家  ›  专栏  ›  技术社区  ›  whiskeysierra

double.isnan()如何工作?

  •  8
  • whiskeysierra  · 技术社区  · 14 年前

    sun jdk实现如下所示:

    return v != v;
    

    有人能解释一下这是怎么回事吗?

    2 回复  |  直到 14 年前
        1
  •  13
  •   Michael Mrozek    14 年前

    NaN值不等于任何东西(如果一个等式的一边是NaN,则等式为False),所以NaN!=南。显然每一个正常的双精度运算都等于它自己

        2
  •  4
  •   Uri    14 年前

    一个nan是唯一一个不等于自身的double。因此,检查v!=v只对nan产生true。

    以下是 Java spec 不得不说:

    浮点运算符产生no 例外情况(第11条)。一次行动 溢出产生有符号的无穷大, 下溢产生的操作 非规范化值或有符号零, 一个没有 数学上确定的结果 产生NaN。所有数值运算 以NaN为操作数生成NaN为 结果。 就像以前一样 描述,Nan是无序的,所以 涉及的数值比较操作 一个或两个nans返回false !=涉及NaN回报的比较 是的,包括X!当x为NaN时为x。