一致的整数除法与浮点运算

问题描述

| 我需要在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脚本的浏览器供应商实施。 特定版本的ECMA脚本是否指定了一致性级别(通常不是)。 您可能不知道的最终用户计算机上的其他外部因素。 众所周知,浮点算术容易产生舍入误差。可以认为小数点右边的所有这些数字都是准确的,但让两台运行完全不同的硬件和软件配置的机器达成一致的计算就像放牧猫一样。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...