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的数学规则[重复]的主要内容,如果未能解决你的问题,请参考以下文章