零分割无限

时间:2014-02-19 22:04:39

标签: javascript

在JavaScript中,如果除以0,则得到Infinity

typeof Infinity; //number
isNaN(Infinity); //false

这暗示无限是一个数字(当然,那里没有争论)。

我所学到的任何除以零的东西都是不确定的形式,没有价值,不是数字。

然而,这个定义是算术的,我知道在编程中它可以产生无穷大,不是数字,或只是抛出异常。

那么为什么要扔无限?有人对此有解释吗?

6 个答案:

答案 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)

这是因为Javascript使用浮点算术,并且处理除零的例外情况。

  

除以零(对有限操作数的操作给出精确的无限结果,例如1/0或log(0))(默认返回±无穷大)。

wikipedia source