我只是想知道JavaScript中的数字是否可以达到Infinity

JavaScript数字范围足够好-2到64个不同数字的幂,大约是18 Quintilian(一个18,后面有18个零)。好多啊。

现在,我在这里有几个问题:


当数字超出该范围时,会发生什么? JavaScript是否会将其称为新的Infinity数字?
JavaScript中有哪些所有方案,可以在运行时将值Infinity分配给变量?




让我们看一个代码示例,

尝试编写方法incrementNumToInfinity()以使值递增一定的次数,以便a === b可以评估为true(还可以查看其他可能的情况,其中JavaScript引擎可以将值分配为到运行时中的变量)。



var a = 1000; // a positive number
var b = Infinity;
console.log(a === b); // It returns false, that's expected

function incrementNumToInfinity(num) {
    // Logic to convert our variable num into Infinity
    return num;
};

a = incrementNumToInfinity(a); // Input: 1000, Expected output: Infinity
console.log(a === b); // Should return true

最佳答案

JavaScript中的数字能否在运行时达到Infinity?


在运行时可能会获得一个数字,该数字是计算的结果,并且其值Infinity。 Nina Scholz有shown这样的一种情况:如果您执行x = 1 / 0,则x的值将为Infinity


  当数字超过该范围(即超出JavaScript可以处理的范围)时,会发生什么? JavaScript是否会将其称为新的Infinity数字?


我们可以尝试一下。 Number.MAX_VALUE是JavaScript可以表示的最大浮点数。如果运行此命令:

Number.MAX_VALUE + 1


您得到很大的数字,但没有Infinity。那里发生了什么事?嗯,凭直觉,请尝试以下操作:

Number.MAX_VALUE + 1 === Number.MAX_VALUE


结果为true。说问题是浮点数的精度有限,当我将Number.MAX_VALUE加1时,没有足够的精度来记录增量。

如果您尝试这样做:

Number.MAX_VALUE * 2


然后,您得到Infinity


  JavaScript中有哪些所有方案,可以在运行时将Infinity值分配给变量?


“所有方案” ...嗯...产生所有方案的枚举有多个问题。一方面,尚不清楚什么标准应该将一种情况彼此区分。 -Math.log(0)是不同于1 / 0的方案。如果是这样,为什么?还有一个问题是JavaScript引擎在实现数学函数方面有很大的余地。例如,在current draft中这样指定Math.tan


  Math.tan(x)
  
  返回x的切线与实现有关的近似值。该参数以弧度表示。
  
  如果xNaN,则结果为NaN
  
  如果x+0,则结果为+0
  
  如果x-0,则结果为-0
  
  如果x+∞-∞,则结果是NaN


它不要求Math.tan(Math.PI / 2)的值。如果您回忆起三角学类,则pi / 2为90度,并且在该角度处的切线为无限大。 v8的各种版本已返回Infinity或非常大的正数。 (请参见this question。)该规范并不要求一个结果要强于另一个结果:实现可以自由选择。

因此,实际上,如果您从数学上知道应该产生Infinity的一组情况开始,直到尝试它们,才知道它们是否会真正产生该值。



对我来说,使用incrementNumToInfinity函数的问题部分并不十分清楚。您似乎在问是否仅通过增加数字即可达到无穷大。这取决于你的意思。如果您的意思是:

let x = 0;
while (x !== Infinity) {
  x++;
}


这将永远不会终止。 x永远不会超出Number.MAX_SAFE_INTEGER + 1。因此不会达到Infinity。尝试这个:

let x = Number.MAX_SAFE_INTEGER + 1;
x === x + 1;


您将得到结果true。再次遇到精度问题。 1的增量不足以在您提供的精度范围内产生差异。

将增量更改为2、5、10或10000000并不能真正解决问题,它只是更改了增量之前您可以走多远,否则不再有任何区别。

关于javascript - JavaScript中的数字能否在运行时达到Infinity?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55949608/

10-13 02:03