我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少delta = 0.29和delta = 0.58的结果。在调查中,我注意到以下Python代码:
delta = 0.29
delta = 0.58
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脚本:
0.28999999999999998
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
而且我看不到发生这种舍入错误的数字中的任何模式。为什么这些特定数字会发生这种情况?
不能由精确的2的幂构成的任何数字都不能完全表示为浮点数。它需要被近似。有时最接近的近似值会小于实际数字。