为什么是
Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE
=> false
但是
Number.MAX_VALUE + Number.MIN_VALUE == Number.MAX_VALUE
=> true
?
我的预期是,我添加到最大值的所有内容都必须溢出。
最佳答案
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
为真,因为算术舍入到最接近的可表示值,并且将小值添加到最大有限值产生的结果非常接近最大有限值,所以它四舍五入到最大有限值。
(注意:关于舍入到最接近的可表示值的规则将无穷大视为在有限值末尾的正常位置,因此任何大于或等于 Number.MAX_VALUE
加上半个“步”,舍入到无穷大。)
关于javascript - float 什么时候溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53433230/