浮点数什么时候溢出?

时间:2018-11-22 14:36:00

标签: javascript floating-point

为什么是

Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE
=> false

但是

Number.MAX_VALUE + Number.MIN_VALUE == Number.MAX_VALUE
=> true

我的期望是,我添加到最大值的所有内容都必须溢出。

2 个答案:

答案 0 :(得分:1)

想象一下:

MAX_VALUE =无限

MIN_VALUE = 0

因此,当您将MAX_VALUE与MIN_VALUE相加时,就像您添加了0。因此仍为MAX_VALUE。

  

请考虑一下,因为所有非零数字都在很远的右边,因此它们没有净作用。

答案 1 :(得分:1)

JavaScript的Number.MAX_VALUE命名错误。它不是最大可表示值。它是最大可表示的有限值。实际最大可表示值是无穷大。

如果名称正确,则Number.MAX_VALUE为无穷大,则Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE将为真,因为无穷大加无穷大为真。

由于Number.MAX_VALUE + Number.MAX_VALUE的数学值超出了可表示的有限值,因此将其舍入为无穷大。

Number.MAX_VALUE + Number.MIN_VALUE == Number.MAX_VALUE是正确的,因为算术四舍五入到最接近的可表示值,并且将一个小值加到最大有限值会产生非常接近最大有限值的结果,因此它会四舍五入到最大有限值。 / p>

(注意:关于四舍五入到最接近的可表示值的规则将无穷大视为在有限值的末尾位于正常位置,因此任何大于或等于Number.MAX_VALUE加一半的结果一个超越它的“台阶”会四舍五入。)