我正在尝试计算(6.6 % 1.1)。我预计这是 0,但我得到 1.0999999999999996。您可以在 javascript 控制台中轻松地重现这一点。我猜这是一个内部舍入错误?你如何解决这个问题?
该%运算符以一种不太明显的方式作用于非整数值。在一个表达式中
n % d
Run Code Online (Sandbox Code Playgroud)
JavaScript 所做的就是找到q小于 的最大整数(我将其称为镜像规范)n / d。然后计算乘积d * q,结果就是差值n - (d * q)。
(为了简单起见,我忽略了符号问题。)
这个想法对你考虑整数余数是有意义的:如果n和d是整数,那么上面的公式就完全有意义。拿17 % 3。是17 / 3,5.something所以q是5,余数是17 - (5 * 3)或2。
就您而言,该过程有点令人困惑,因为对于标准 IEEE 754 浮点来说,6.6 / 1.1不是6; 由于用二进制浮点表示十进制浮点值的精度,它仅比. 6因此,当q计算时,结果是5而不是6。因此,答案是6 - (5 * 1.1), 或6 - 5.5,它(同样,不精确)仅比 略小一点1.1。
| 归档时间: |
|
| 查看次数: |
1570 次 |
| 最近记录: |