javascript – 具有浮点运算的一致整数除法

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

到目前为止,我没有发现任何不一致的地方,但我无法确切地说服自己,他们不可能发生.所以我想知道:

>假设a和b分别是范围0..2 ^ 31-1和1..2 ^ 31-1中的整数,则来自JavaScript Math.floor(a / b)(和a / b | 0)的结果保证跨机器和运行时保持一致?
>为什么或为什么不呢?

最佳答案 我的猜测是否定的.答案是,它取决于许多因素:

> ECMA Script的浏览器供应商实现.
>特定版本的ECMA脚本是否指定了一致性级别(通常不是).
>您可能不知道的最终用户机器上的其他外部因素.

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

点赞