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. 为什么或者为什么不?

4

1 回答 1

2

我的猜测是否定的。答案是它取决于许多因素:

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

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

  3. 您可能不知道的最终用户机器上的其他外部因素。

众所周知,浮点运算容易受到舍入误差的影响。虽然很高兴认为所有这些数字都在小数点右侧是准确的,但让两台运行截然不同的硬件和软件配置的机器就计算达成一致可能就像放牧猫一样。

于 2011-05-31T18:50:19.873 回答