当我用下面的方法计算一个float
s列表的平均值时
def mean(x):
sum(x) / len(x)
然后我通常不关心浮点运算中的微小错误。尽管如此,我目前面临一个问题,我想让a
list
中的所有元素都等于或高于列表的平均值。同样,这通常不是问题,但当我面对这样的情况:列表中的所有元素都等于浮点数,而由上面的函数计算的平均值实际上返回的值高于所有元素。在我看来,这显然是个问题。
我需要解决python3.x库不可靠的问题(比如统计)。
编辑:
评论中建议使用舍入法。有趣的是,这导致错误更加罕见,但它们仍然会发生,例如在本例中:
[0.024484987, 0.024484987, 0.024484987, 0.024484987, ...] # x
0.024485 # mean
[] # numbers above mean
最佳答案
我认为你应该使用math.fsum()
而不是sum
。例如:
>>> a = [0.024484987, 0.024484987, 0.024484987, 0.024484987] * 1360001
>>> math.fsum(a) / len(a)
0.024484987
我相信,这就是你想要的答案。无论
a
的长度如何,它产生的结果比使用sum()
的等效结果更一致。>>> sum(a) / len(a)
0.024484987003073517
关于python - 避免浮点误差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49083606/