当我用下面的方法计算一个floats列表的平均值时

def mean(x):
    sum(x) / len(x)

然后我通常不关心浮点运算中的微小错误。尽管如此,我目前面临一个问题,我想让alist中的所有元素都等于或高于列表的平均值。
同样,这通常不是问题,但当我面对这样的情况:列表中的所有元素都等于浮点数,而由上面的函数计算的平均值实际上返回的值高于所有元素。在我看来,这显然是个问题。
我需要解决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/

10-12 21:04