我不是数学家,但我认为除以无穷大要么是糟糕的数学,要么至少是不切实际的。
我只花了半个小时调试我的 javascript,它在 Firefox 中运行良好,但在 IE 中给了我一个错误。我终于意识到这是因为在某些情况下,我要求 IE 除以无穷大。
所以,我解决了这个问题,但我很好奇为什么 Firefox 可以接受。诚然,这可能更像是一个数学问题而不是编程问题。;)
我不是数学家,但我认为除以无穷大要么是糟糕的数学,要么至少是不切实际的。
我只花了半个小时调试我的 javascript,它在 Firefox 中运行良好,但在 IE 中给了我一个错误。我终于意识到这是因为在某些情况下,我要求 IE 除以无穷大。
所以,我解决了这个问题,但我很好奇为什么 Firefox 可以接受。诚然,这可能更像是一个数学问题而不是编程问题。;)
除以无穷大是好的——它是零。
除非你将无穷大除以无穷大,这是未定义的(至少一般来说)
我认为这是 IE 中的一个错误。根据 IEEE 数学规则,n/Inf=0(对于 n!=0)。因此,如果 IE 对此嗤之以鼻,那就是 IE 的问题。另一方面,在普通的数学运算中使用 Inf 是有问题的,如果你的代码一开始不依赖它,你会更好。
为什么危险?好吧,首先,根据 IEEE 754:
1/0 = Inf
1/-0 = -Inf
但我们知道 0 = -0,因此
Inf = -Inf
这显然是不可取的。无论如何,IEEE 并不是要让 Inf 成为一个普通的数字。Inf 和 NaN 的存在是为了在计算机中进行浮点运算,其固有的有限精度和溢出问题类似于普通世界的算术,举个最简单的例子,实数集在加法下是封闭的(两个实数相加总是导致另一个实数)。如果你用有限精度浮点数来做这件事,你会遇到两个数字相加会导致溢出的情况。为了避免将其视为错误条件,IEEE 引入了两个额外的符号 Inf 和 NaN,以及一组用于它们行为的规则。现在数学运算的结果总是一个数字,或 Inf,或 NaN,结果是否有意义由用户决定。
从数学的角度来看,将一个数除以无穷大是完全合理的。它是一个无限接近零的数字,实际上并没有达到零。
从软件的角度来看,这要困难得多,因为无穷大不是一个离散的可表示值。我的猜测是您的行为差异是基于设计决策。
在 Firefox 中,他们可能选择返回零值,因为出于所有实际目的,此结果将满足您的需要。
另一方面,在 IE 中,开发人员似乎有意识地决定不允许您执行他们知道他们无法给出离散答案的计算。