javascript - js `Number` 类型加起来等于无穷大吗?

标签 javascript floating-point

如果有足够的时间,这个循环会结束吗?

for (let i = 0; 1 / i > 0; i++) {} // js code [0]

我猜它会在 i 达到 Number.POSITIVE_INFINITY 但不知道如何测试时发生。

编辑:

for (let i = 0; 1 / i > 0; i += k) {} // js code [1]
  1. 使 js 代码 [1] 完成的最小正数 k 是多少? (至少 k = 1e304 会)

  2. 假设问题 1 的答案是 K,是否任何大于 K 的数字都能保证完成 js 代码 [1]?

最佳答案

不,它永远不会完成,因为在高数字时,数字精度会失败。例如,将 1 添加到 1e16 会得到一个也等于 1e16 的数字 - 超过某个点,它将永远不会继续:

console.log((1e16 + 1) === 1e16);

那个点是 9007199254740992。 Javascript 的 MAX_SAFE_INTEGER9007199254740991。将 9007199254740991 加一得到 9007199254740992,但将 9007199254740992 加一得到相同的数字,9007199254740992:

console.log(9007199254740991 + 1 === 9007199254740992);
console.log(9007199254740992 + 1 === 9007199254740992);

您在 1.7e308 附近到达Infinity

关于javascript - js `Number` 类型加起来等于无穷大吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52789436/

相关文章:

c++ - 允许这种浮点优化吗?

JavaScript 简化器?

javascript - jQuery 显示前两个回复,隐藏其余部分

javascript - 定义在每个页面加载时运行的函数

java - 如何检查字符串是否为正数

Haskell:强制 float 有两位小数

javascript - 所有http代码的jquery ajax相同数据

javascript - 如何在socket.io中发出数据?

PHP 没有返回数字类型

language-agnostic - 我应该如何进行浮点比较?