【问题标题】:rules for maths on NaN in Java [duplicate]Java中NaN的数学规则[重复]
【发布时间】: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 相同),并且无论如何都包含在已接受的答案中。

标签: java nan


【解决方案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

更多信息:

【讨论】:

  • 不是一个很好的例子;可以想出一个字符串“减法”的定义...
  • "0/0...我们不知道确切的结果。"其实我们都知道。 (提示:这是一个数字x 等于x*0 == 0)。
  • @jameslarge 酷,编辑我的帖子并发布确切的值 :)
猜你喜欢
  • 2011-01-09
  • 2017-02-27
  • 1970-01-01
  • 2011-12-08
  • 2023-04-08
  • 2012-06-21
  • 2012-09-19
  • 2015-03-26
  • 2021-04-16
相关资源
最近更新 更多