在JavaScript中,如果除以0
,则得到Infinity
typeof Infinity; //number
isNaN(Infinity); //false
这暗示无限是一个数字(当然,那里没有争论)。
我所学到的任何除以零的东西都是不确定的形式,没有价值,不是数字。
然而,这个定义是算术的,我知道在编程中它可以产生无穷大,不是数字,或只是抛出异常。
那么为什么要扔无限?有人对此有解释吗?
答案 0 :(得分:4)
首先,导致Infinity
不是由于幕后的一些疯狂数学。 The spec states that:
将零非零有限值划分为有符号无穷大。该标志由上述规则确定。
规范作者的逻辑如下:
2/1 = 2
。很简单。
2/0.5 = 4
。将分母减半可使结果翻倍。
......等等:
2/0.0000000000000005 = 4e+1
。随着分母趋向零,结果增长。因此,规范作者决定将零除以默认为Infinity,以及导致数字太大而JavaScript无法表示[0]的任何其他操作。 (而不是一些准数字状态或除零除外)。
您可以在Google的V8引擎代码中看到这一点:https://github.com/v8/v8/blob/bd8c70f5fc9c57eeee478ed36f933d3139ee221a/src/hydrogen-instructions.cc#L4063
[0]“如果幅度太大而无法表示,则操作溢出;结果是无穷大的适当符号。”
答案 1 :(得分:0)
当x
在公式y=1/x
中趋于0时,y
趋于无穷大。因此,如果某些东西最终成为一个非常高的数字(遵循该逻辑)将由无穷大代表,那将是有意义的。在10^320
左右,JavaScript返回Infinity
而不是实际结果,因此如果计算结果超过该阈值,则只返回无穷大。
答案 2 :(得分:0)
Javascript是一种松散类型的语言,这意味着它不必返回您期望从函数中获得的类型。
Infinity实际上不是整数
在强类型语言中,如果你的函数应该返回一个int,这意味着当你得到一个不是int的值时你唯一能做的就是抛出一个异常
在松散类型的语言中,你有另一种选择,即返回一个更好地表示结果的新类型(例如在这种情况下为无穷大)
答案 3 :(得分:0)
Infinity与不确定性非常不同。
如果你计算x / 0 +你获得+无穷大,而对于x / o-你得到-infinity(在那个例子中x> 0)。
Javascript使用它来注意您已经超出了底层浮点存储的容量。
然后,您可以处理它以指示您的sw指向特殊情况或大数版本的计算。
Infinity在公式中实际上是一致的。没有它,你必须将公式分解成小块,最终会得到更复杂的代码。
试试这个,你得到j作为无限:
var i = Infinity;
var j = 2*i/5;
console.log("result = "+j);
答案 4 :(得分:0)
由ECMAScript language specification确定:
如果两个操作数具有相同的结果,则结果的符号为正 如果操作数有不同的符号,则为负数。
将无穷大除以零会导致无穷大。标志是 由上述规则决定。
将零非零有限值除以零会产生有符号无穷大。该标志由上述规则确定。
由于算术分数的分母倾向于0
(对于有限的非零分子),结果倾向于+Infinity
或-Infinity
,具体取决于操作数的符号。这可以通过以下方式看出:
1/0.1 = 10
1/0.01 = 100
1/0.001 = 1000
1/0.0000000001 = 10000000000
1/1e-308 = 1e308
更进一步,当你执行除零时,JavaScript引擎会给出结果(由上面引用的规范确定):
1/0 = Number.POSITIVE_INFINITY
-1/0 = Number.NEGATIVE_INFINITY
-1/-0 = Number.POSITIVE_INFINITY
1/-0 = Number.NEGATIVE_INFINITY
如果除以足够大的值,则相同:
1/1e309 = Number.POSITIVE_INFINITY
答案 5 :(得分:0)