2011-05-31 28 views
4

我需要在JavaScript中进行整数除法,这只能给我使用双精度浮点数。通常我只是做Math.floor(a/b)(或a/b | 0)并完成它,但在这种情况下,我正在以锁步方式执行模拟,并且需要确保跨机器和运行时的一致性,无论它们是使用64位还是80位内部精确。与浮点运算一致的整数除法

到目前为止我还没有注意到任何不一致,但我还没有能够确定地说服自己,他们不会发生。所以我在想:

  1. 假设ab分别为0..2^31-1和1..2^31-1是整数,其是从JavaScript Math.floor(a/b)(和a/b | 0)结果保证在机器和运行时间保持一致?

  2. 为什么或为什么不?

回答

2

我的猜测是否定的。答案将取决于以下因素:

  1. ECMA Script的浏览器供应商实现。

  2. ECMA Script的特定版本是否指定该一致性级别(通常不是)。

  3. 您可能未意识到的最终用户机器上的其他外部因素。

浮点运算是非常容易发生舍入误差。尽管认为所有这些数字都在小数点右侧是准确的,但让两台运行完全不同硬件和软件配置的计算机达成一致计算可能就像放牧猫一样。