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

时间:2019-05-02 09:39:15

标签: javascript numbers infinity

我只是好奇JavaScript中的数字是否可以达到Infinity

JavaScript编号的范围已经足够好- 2到64个不同数字的幂次,大约是 18 Quintilian(后跟18个零的18)。。好多啊。

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

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

让我们看一个代码示例,

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

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

4 个答案:

答案 0 :(得分:2)

  

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引擎在实现数学函数方面有很大的余地。例如,Math.tancurrent draft中这样指定:

  

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

您将得到结果class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fetchJson() } fun fetchJson(){ println("attemting to fetch JSON") val url = "https://ws.smn.gob.ar/map_items/weather" val request = Request.Builder().url(url).build() val client = OkHttpClient() client.newCall(request).enqueue(object: Callback { override fun onResponse(call: Call, response: Response) { var body = response?.body()?.string() println(body) val gson = GsonBuilder().create() val cities = gson.fromJson(body, Cities::class.java) } override fun onFailure(call: Call, e: IOException) { println("Falied to comunicate") } }) } } 。再次遇到精度问题。 增量1不足以使您获得的精度有所不同。

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

答案 1 :(得分:1)

  

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

假设您的程序没有内存泄漏。我相信它可以达到无限远。

console.log(Number.MAX_SAFE_INTEGER)
// 9007199254740991
console.log(Number.MAX_VALUE)
// 1.7976931348623157e+308

var i = Number.MAX_SAFE_INTEGER
while (i != Infinity) {
  i += Math.pow(10, 307)
  console.log(i)
}
// 1.0000000000000005e+307
// 2.000000000000001e+307
// 3.0000000000000013e+307
// 4.000000000000002e+307
// 5.000000000000002e+307
// 6.000000000000003e+307
// 7.000000000000003e+307
// 8.000000000000004e+307
// 9.000000000000004e+307
// 1.0000000000000004e+308
// 1.1000000000000004e+308
// 1.2000000000000003e+308
// 1.3000000000000003e+308
// 1.4000000000000003e+308
// 1.5000000000000002e+308
// 1.6000000000000002e+308
// 1.7000000000000001e+308
// Infinity

答案 2 :(得分:0)

平方的平方根与乘以相同平方的PI的乘积减去PI的比率,即当它接近无穷大时等于无穷大,等于无穷大。或同时证明阿基米德是对的。 PI和正方形是等价的,因为它们都不会达到0。这种现象也解释了勾股定理中的零边界,其中A平方+ B平方= c平方接近无穷大。

Math.sqrt(1)/(Math.PI *((Math.sqrt(1)))-Math.PI)

这是狐狸和鸭子之谜的结果。当鸭子移动到池塘的距离为1r时,狐狸移动180度或它的相对角和相邻角的平方的总和,我们得到平方2 ^ 2(距池塘中心的行进距离)平方根PI与给定的1:4比率,因此三角形在pi-pi = Infinity或与任意矢量在任何特定点处为1:1的关系的低通量。

答案 3 :(得分:-1)

广告2:

  

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

您可以除以零。

var x = 1 / 0;

console.log(x);