为什么是
Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE
=> false
但是
Number.MAX_VALUE + Number.MIN_VALUE == Number.MAX_VALUE
=> true
?
我的期望是,我添加到最大值的所有内容都必须溢出。
答案 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
加一半的结果一个超越它的“台阶”会四舍五入。)