【问题标题】:How does Double.isNaN() work?Double.isNaN() 如何工作?
【发布时间】:2011-02-10 08:40:31
【问题描述】:

sun jdk 实现如下:

return v != v;

谁能解释一下它是如何工作的?

【问题讨论】:

    标签: java floating-point double nan


    【解决方案1】:

    nan 是唯一不等于自身的 double。因此,检查 v!=v 只会为 NaN 生成 True。

    这是Java spec 必须说的话:

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

    【讨论】:

      【解决方案2】:

      NaN 值不等于任何值(如果等式的一侧是 NaN,则等式为假),因此 NaN != NaN。显然每个正常的双精度都等于它自己

      【讨论】:

        猜你喜欢
        • 2014-08-11
        • 2017-06-25
        • 2011-12-19
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-23
        相关资源
        最近更新 更多