当我从列表中添加数字时,我得到额外的.00000000003。它来自哪里?
这是我的数字列表
list = [210.0, 140.0, 171.0, 70.0, 625.0, 187.5, 70.0, 1496.89]
当我得到所有数字的总和时,我得到2970.3900000000003
>>> sum(list)
2970.3900000000003
>>> total = 0
>>> for x in list:
... total += x
...
>>> total
2970.3900000000003
但是说我打印,总计是常规的
>>> total = 0
>>> for x in list:
... total += x
... print total
...
210.0
350.0
521.0
591.0
1216.0
1403.5
1473.5
2970.39
那些额外的sig figs来自哪里?如何在其他地方使用它时避免使用它?
答案 0 :(得分:1)
它来自浮点舍入。如果您需要精确的十进制数学运算,则必须使用Decimal
。
> sum([decimal.Decimal(f) for f in '210.0 140.0 171.0 70.0 625.0 187.5 70.0 1496.89'.split()])
Decimal('2970.39')
简短版本是您的分数(如1496.89)以二进制形式存储,而.89绝对不能表示为k / 2 ^ n。 Here's更长的文档,说明了同样的事情。
有时你可以通过使用python' %g
格式化程序打印最终值来逃避这种情况,例如
> print '%g' % sum([210.0, 140.0, 171.0, 70.0, 625.0, 187.5, 70.0, 1496.89])
2970.39
很难找到你实际拥有的数字的简短表示(二进制)