Double.isNaN() 如何工作?

发布于 2024-08-29 06:38:31 字数 88 浏览 5 评论 0原文

sun jdk 实现看起来像这样:

return v != v;

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

The sun jdk implementation looks like this:

return v != v;

Can anyone explain how that works?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我的鱼塘能养鲲 2024-09-05 06:38:31

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

NaN values are not equal to anything (if one side of an equality is NaN, the equality is false), so NaN != NaN. Obviously every normal double does equal itself

谁对谁错谁最难过 2024-09-05 06:38:31

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

以下是 Java 规范 的内容说:

浮点运算符不会产生
例外情况(§11)。一个操作
溢出产生一个有符号的无穷大,
产生下溢的操作
非规范化值或有符号零,
和一个没有的操作
数学上确定的结果
产生 NaN。所有数字运算
以 NaN 作为操作数产生 NaN 作为
一个结果。 正如已经发生的那样
如上所述,NaN 是无序的,因此
数值比较运算涉及
一个或两个 NaN 返回 false,任何
!= 涉及 NaN 返回的比较
true,包括当 x 为 NaN 时 x!=x。

A nan is the only double that is not equal to itself. Thus, checking v!=v will only produce True for NaN.

Here is what the Java spec has to say:

Floating-point operators produce no
exceptions (§11). An operation that
overflows produces a signed infinity,
an operation that underflows produces
a denormalized value or a signed zero,
and an operation that has no
mathematically definite result
produces NaN. All numeric operations
with NaN as an operand produce NaN as
a result. As has already been
described, NaN is unordered, so a
numeric comparison operation involving
one or two NaNs returns false and any
!= comparison involving NaN returns
true, including x!=x when x is NaN.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文