程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

避免浮点误差

发布于2020-01-16 12:25     阅读(1268)     评论(0)     点赞(14)     收藏(1)


当我通过float以下方式计算s 列表的均值时

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

那么我通常不关心浮点运算中的微小错误。虽然,我目前面临的一个问题,我想在所有的元素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


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/224512/6fbd9d579b70c573553a/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

14 0
收藏该文
已收藏

评论内容:(最多支持255个字符)