浮点数的Python舍入错误
我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少delta = 0.29
和delta = 0.58
的结果。在调查中,我注意到以下Python代码:
for i_delta in range(0, 101, 1): delta = float(i_delta) / 100
(...)
filename = 'foo' + str(int(delta * 100)) + '.dat'
生成的相同文件的增量= 0.28和0.29,与.57和.58相同,原因是python返回float(29)/ 100为0.28999999999999998
。但这不是系统错误,从某种意义上说,它并不是每个整数都发生的。因此,我创建了以下Python脚本:
import sysn = int(sys.argv[1])
for i in range(0, n + 1):
a = int(100 * (float(i) / 100))
if i != a: print i, a
而且我看不到发生这种舍入错误的数字中的任何模式。为什么这些特定数字会发生这种情况?
回答:
不能由精确的2的幂构成的任何数字都不能完全表示为浮点数。它需要被近似。有时最接近的近似值会小于实际数字。
以上是 浮点数的Python舍入错误 的全部内容, 来源链接: utcz.com/qa/403095.html