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以0.28999999999999998的形式返回Float(29)/100。但这并不是一个系统性的错误,并不是每个整数都会发生这种情况。因此,我创建了以下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我看不出数字中会出现舍入错误的任何模式。为什么这些特定的数字会出现这种情况呢?
2 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
炎炎设计
TA贡献1808条经验 获得超4个赞
>>> from decimal import Decimal>>> Decimal(29)/Decimal(100)Decimal('0.29')>>> Decimal('0.29')*100Decimal('29')>>> int(Decimal('29'))29
>>> s = Decimal(7)>>> Decimal(1)/s/s/s/s/s/s/s*s*s*s*s*s*s*sDecimal('0.9999999999999999999999999996')>>> int(Decimal('0.9999999999999999999999999996'))0
>>> int(1.9999)1>>> int(round(1.999))2
添加回答
举报
0/150
提交
取消