Java中NaN的数学规则[重复]

Posted

技术标签:

【中文标题】Java中NaN的数学规则[重复]【英文标题】:rules for maths on NaN in Java [duplicate] 【发布时间】:2014-11-16 23:58:03 【问题描述】:

我希望 Double.NaN - Double.NaN 等于 0,但事实并非如此。

有人可以解释发生了什么吗? 在 NaN 上进行数学运算时有哪些经验法则? 是不是类似于“如果任何子表达式是 NaN,那么整个 expr 都是 NaN”?

谢谢,

【问题讨论】:

NaN 从字面上看是不是一个数字。你不能对它做算术。 即使 NaN==NaN 返回 false (因此有特殊的方法来测试 NaN。基本上 NaN 是“我不知道”。什么是“我不知道”减去“我不知道”。它可能是 6 , 5, 无穷大。所以它仍然是“我不知道” 并不是说像 infinity-inifinity 这样的东西仍然是未定义的......更不用说前面解释过的“我不知道”;) 我已将其标记为重复;问题相同,但在概念上是相同的(x == x 与 x - x == 0 相同),并且无论如何都包含在已接受的答案中。 【参考方案1】:

NaN 代表Not a Number,这就是NaN - NaN = NaN 的原因。想象一下这样的事情:

"foo" - "bar" = ??? <-- What should be the output?

或者

"foo" - (new Object()) = ??? <-- none of them are numbers

一个更数学的例子:

0 / 0 = NaN <-- Mathematically we don't know the exact result

所以,有这样的事情:

0 / 0 - 0 / 0 = NaN

更多信息:

NaN on Wikipedia

【讨论】:

不是一个很好的例子;可以想出一个字符串“减法”的定义... "0/0...我们不知道确切的结果。"其实我们都知道。 (提示:这是一个数字x 等于x*0 == 0)。 @jameslarge 酷,编辑我的帖子并发布确切的值 :)

以上是关于Java中NaN的数学规则[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中用0替换Nan值[重复]

检查NAN值java [重复]

如何在 C++ 中避免 NaN [重复]

在Matlab中用NaN取矩阵的平均值[重复]

IF 语句中的 Javascript“NaN”[重复]

Python:仅在列表末尾删除重复值