为什么我的列表结构数学运算减少了几十亿?

lme*_*ato 3 python list

我有一些非常简单的函数,它试图返回一个列表,该列表是输入列表与该列表的平均值之间的距离.代码几乎可以工作.有什么想法为什么结果略有偏离?

def distances_from_average(test_list):
    average = [sum(test_list)/float(len(test_list))]*len(test_list)
    return [x-y for x,y in zip(test_list, average)]
Run Code Online (Sandbox Code Playgroud)

以下是我的示例结果:[ - 4.200000000000003,35.8,2.799999999999997,-23.200000000000003,-11.200000000000003]应该等于[4.2,-35.8,-2.8,23.2,11.2]

rsc*_*son 7

这是由于计算机代表浮点数的方式.

它们并不总是以您期望的方式准确,因此不应该用于检查平等或代表金额等事情.

这些数字是如何使用的?如果您需要这种准确性,也许有更好的方法来使用这些信息,例如检查范围而不是检查相等性.

这是关于这个主题的一些很好的阅读材料