浮点数的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 sys
n = int(sys.argv[1])
for i in range(0, n + 1):
a = int(100 * (float(i) / 100))
if i != a: print i, a
而且我看不到发生这种舍入错误的数字中的任何模式。为什么这些特定数字会发生这种情况?