我不知道这是否是一个明显的bug,但在运行用于改变模拟参数的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'
当delta=0.28和0.29时,生成了相同的文件;delta为0.57和0.58时也是一样的。这是因为Python将float(29)/100返回为0.28999999999999998,而非0.29。但这不是系统性错误,不会发生在每个整数上。因此我创建了以下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
我无法看出这些存在舍入误差的数字中有任何规律。为什么会发生在这些特定的数字上?