js`Number`类型会加起来无穷大吗?

don*_* jy 3 javascript floating-point

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

for (let i = 0; 1 / i > 0; i++) {} // js code [0]
Run Code Online (Sandbox Code Playgroud)

我想它会i到达Number.POSITIVE_INFINITY但不知道如何测试.

编辑:

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

  2. 让我们假设答案是问题1 K,是否有任何数字大于K保证js代码完成[1]

Cer*_*nce 6

不,它永远不会完成,因为在高数字时,数字精度会失败.例如,添加11e16了一些这也等于结果1e16-过去的某一个点,它永远不会进步:

console.log((1e16 + 1) === 1e16);
Run Code Online (Sandbox Code Playgroud)

那一点是9007199254740992.Javascript MAX_SAFE_INTEGER9007199254740991.在9007199254740991结果中添加一个9007199254740992,但在结果中添加一个9007199254740992相同的数字,9007199254740992:

console.log(9007199254740991 + 1 === 9007199254740992);
console.log(9007199254740992 + 1 === 9007199254740992);
Run Code Online (Sandbox Code Playgroud)

Infinity到处走走1.7e308.

  • 确切的"特定点"是"Number.MAX_SAFE_INTEGER"(9007199254740991) (3认同)