【问题标题】:JavaScript - should Infinity and NaN be numbers?JavaScript - Infinity 和 NaN 应该是数字吗?
【发布时间】:2016-02-16 19:26:50
【问题描述】:

少量实验

我打算用JS写一些数学表达式,想知道:

typeof(Infinity)              // "number", in Maths it is NOT a number
typeof(NaN)                   // "number", how NaN (Not A Number) can actually be a number?

还有一些实验:

Infinity === Infinity         // TRUE
Infinity * 2 === Infinity * 5 // TRUE, so 2===5 if Infinity !== 0?

但是,这对我来说很有意义:

NaN * 2 === NaN * 5           // FALSE

问题

  • 为什么JS是这样设计的?有什么特别的原因吗?
  • 在 JS 中编写数学表达式时是否存在潜在威胁?

【问题讨论】:

  • 它们浮点值 - 类型为number。您会在所有其他使用标准浮点数学的语言中找到它。
  • 您期望Infinity * 2Infinity * 5 评估为不会有Infinity * 2 === Infinity * 5?想一想。根据定义,没有大于Infinity 的数字。那么,Infinity * 2 应该是什么?这似乎完全合乎逻辑。另一方面,NaN 的行为方式在我看来很少合乎逻辑。这就是它的本质,你可能只需要了解它是如何工作的。不知道他们为什么这样做。
  • 看看这对你是否有意义:NaN === NaN // FALSE
  • 等等,0 * 2 == 0 * 5,与 Infinity 相比,0 确实是一个数字,所以这证明了 2 == 5?
  • @igorpavlov:Infinity === 1/0,所以你需要将你对0的关心扩展到Infinity。

标签: javascript nan infinity


【解决方案1】:

这里有一个关于两个 NaN 不等式的答案 - Why is NaN === NaN false?。至于无穷大,这是一个纯粹的数学 - 无穷乘以任何东西都是无穷的。最后,typeof 为 Infinity 和 NaN 返回“数字”,因为它们是 JS 中的数字类型常量。

【讨论】:

  • 不是纯数学。这可能是外行对数学的理解,但数学家和 IEEE 754 背后的工程师都知道,“无穷大”是一个非常模糊和超负荷的概念,并且可以使其精确的各种方法比这个答案描述的要复杂。跨度>
【解决方案2】:

为什么 JS 是这样设计的?有什么特别的原因吗?

JavaScript 直接从 IEEE-754 获取 NaN(包括它永远不等于自身的事实)和无穷大,这是计算中浮点数的首选标准,也被许多其他语言使用。 (具体来说,它使用“quiet NaN”。)反过来,IEEE-754 从数学理论中得到了很多(例如,Infinity + 1 === Infinity,显然这是considered true for some kinds of numbers,但我我不是数学家;我认为标准的设计者有理由遵循该定义)。

在 JS 中写数学表达式有潜在的威胁吗?

我不会称它们为威胁,但是:NaN 将在出现的任何计算中传播。除此之外,您还遇到了this question and its answers 中讨论的常见精度问题。

【讨论】:

  • 我对 ∞+1 的言论感到不满。在大多数数学上下文中,“无穷加一”没有定义或没有意义。在那些可能有意义的地方,这个陈述经常是错误的,因为它是正确的。一个错误的例子是超限序数 (ω+1 > ω)。因此,∞+1=∞ 是“标准数学”显然是错误的。 IEEE 754 无穷大的行为方式是因为这是常见数值算法的最佳选择,而不是因为与数学理论有任何深层联系。
  • @delnan:在 cmets 中,我多次说“我不是数学家”。显然,我应该把它放在答案中! :-)
  • @delnan:现在我有了,还有一个很好的 Weaselly Wikipedia 链接。 :-)
  • 我不能要求更多:)
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 2017-02-27
  • 2022-06-12
  • 1970-01-01
  • 2011-09-08
  • 2016-01-16
  • 1970-01-01
  • 2010-10-27
相关资源
最近更新 更多