javascript - float 什么时候溢出?

标签 javascript floating-point

为什么是

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/

相关文章:

php - Javascript iPhone 应用程序发送请求或信息到服务器 PHP 文件

c++ - AVX intrinsic _mm256_rsqrt_ps 的相对误差比根据 intrinsics guide 应该有的要大得多

c - Payne Hanek算法在C中的实现

javascript - 如何设置两个js函数之间的延迟?

javascript - 返回 View MVC/Javascript/.NET Core 时出现问题

JavaScript 运行时错误 : '$' is undefined - using MVC 4

javascript - 部分回发后组合框启用状态重置

perl - int() 递减一个整数

java - 在 Java 中将时间转换为 float ,反之亦然

Java - 整型/长整型、浮点型/ double