相关疑难解决方法(0)

Python楼层划分中的舍入错误

我知道在浮点运算中会发生舍入错误,但有人可以解释这个问题的原因:

>>> 8.0 / 0.4  # as expected
20.0
>>> floor(8.0 / 0.4)  # int works too
20
>>> 8.0 // 0.4  # expecting 20.0
19.0
Run Code Online (Sandbox Code Playgroud)

这在x64上的Python 2和3上都会发生.

据我所知,这是一个错误或非常愚蠢的规范,//因为我没有看到为什么最后一个表达式应该评估的原因19.0.

为什么a // b不简单定义为floor(a / b)

编辑:8.0 % 0.4也评估为0.3999999999999996.至少这是因为随后8.0 // 0.4 * 0.4 + 8.0 % 0.4评估的结果8.0

编辑:这不是浮点数学的重复吗?因为我问为什么这个特定的操作受到(可能是可以避免的)舍入错误的影响,以及为什么a // b没有定义为/等于floor(a / b)

备注:我猜这个不起作用的深层原因是地板划分是不连续的,因此具有无限的条件数使其成为一个不适定的问题.地板划分和浮点数简单地基本上是不兼容的,你永远不应该使用//浮点数.只需使用整数或分数.

python floating-point rounding python-2.7 python-3.x

37
推荐指数
5
解决办法
4331
查看次数