使用浮点运算实现一致的整数除法

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. 为什么或为什么不?
1个回答

2
我猜不行。答案取决于以下几个因素:
  1. ECMA Script的浏览器供应商实现。
  2. 特定版本的ECMA Script是否指定了一定程度的一致性(通常不会)。
  3. 您可能不知道的最终用户机器上的其他外部因素。
浮点运算因舍入误差而闻名。虽然有很多数字在小数点右边,但两台运行硬件和软件配置迥异的计算机在计算上达成一致,就像赶猫一样难。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接