在JavaScript中,如果除以0
,则得到Infinity
typeof Infinity; //number
isNaN(Infinity); //false
这暗示无限是一个数字(当然,没有争论)。
我了解到,任何除以零的东西都是不确定的,没有价值,不是一个数字。
然而,这个定义是用于算术的,我知道在编程中,它可以产生无限,而不是一个数字,或者只是抛出一个异常。
那为什么要扔无限呢?有人对此有解释吗?
发布于 2014-02-19 14:09:01
首先,导致Infinity
并不是由于幕后的一些疯狂的数学。规范规定:
将非零的有限值除以零,得到有符号无穷大.该标志由上述规则确定。
规范作者的逻辑是这样的:
2/1 = 2
。很简单。
2/0.5 = 4
。将分母减半会使结果加倍。
...and等等:
2/0.0000000000000005 = 4e+1
。当分母趋于零时,结果就会增加。因此,规范作者决定将缺省值除以零到Infinity,以及导致JavaScript无法表示的数字太大的任何其他操作。(而不是某种准数字状态或除以零例外)。
你可以在谷歌的V8引擎:https://github.com/v8/v8/blob/bd8c70f5fc9c57eeee478ed36f933d3139ee221a/src/hydrogen-instructions.cc#L4063的代码中看到这一点。
“如果震级太大,无法表示,操作就会溢出;结果是适当符号的无穷大。”
发布于 2014-02-19 14:08:27
当x
在公式y=1/x
中趋于0时,y
趋于无穷大。所以,如果某件事情最终成为一个很高的数字(遵循这个逻辑),用无穷大来表示,那就很有意义了。在10^320
的某个地方,JavaScript返回的是Infinity
而不是实际的结果,所以如果计算结果超出了这个阈值,它只返回无穷大。
发布于 2014-02-19 14:09:52
Javascript是一种松散类型的语言,这意味着它不必返回函数所期望的类型。
无穷大实际上不是一个整数
在强类型语言中,如果函数应该返回int,这意味着当您得到一个非int值时,唯一可以做的事情就是抛出一个异常
在松散类型的语言中,您有另一个选项,即返回一个更好地表示结果的新类型(例如,在本例中为无穷大)。
https://stackoverflow.com/questions/21893525
复制