Python-列表是不是正确加起来?

时间:2015-06-03 03:19:11

标签: python probability

我正在处理作业概率列表,所以很自然地我想在程序中添加一些内容以确保列表等于' 1'。

我正在使用示例列表[0.1,0.2,0.7]。这是我的代码的一小部分

list = [0.7, 0.2, 0.1]

total = 0
for i in list:
    total += i

if total != 1.0:
    print 'Bad'
else:
    print 'Good'

print total

问题似乎源于清单的顺序?如果我在代码中放入列表,它告诉我它不等于一个。但是,如果我切换值[0.1,0.2,0.7],突然它等于1.

任何人都能解释一下发生了什么吗?我真的很想告诉我它等于' 1'不管列表的顺序如何。

4 个答案:

答案 0 :(得分:2)

Decimal library用于accurate decimal addition,因为浮点值不是很精确。

from decimal import Decimal

list = [Decimal(70)/Decimal(100), Decimal(20)/Decimal(100), Decimal(10)/Decimal(100)]

total = 0
for i in list:
    total += i

if total != 1.0:
    print('Bad')
else:
    print('Good')

print(total)

这是你的结果:

  


  1.0

答案 1 :(得分:1)

每当您比较浮点数时,您必须保持三角形的余量。因为十进制数字可能无法准确表示您想要的确切数字

delta = 0.000001
if (total - delta) <= 1 && (total + delta) >= 1:
    print 'Good!'
else:
    print 'Bad!'

答案 2 :(得分:0)

这是浮点运算的问题。这个guide是一个很好的阅读,有助于勾勒出陷阱。

对于您的特定实例,我会检查结果是否在距离1

的可容许距离内

答案 3 :(得分:0)

看起来您仍然希望在列表中使用浮点数并且仍然正确显示,您应该使用错误边距而不是固定数来进行测试:

target_value = 1.0
error_margin = 1E-10
if abs( total - target_value ) <= error_margin:
    print('Good')
else:
    print('Bad')