我只是想知道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
的切线与实现有关的近似值。该参数以弧度表示。如果
x
为NaN
,则结果为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/