当前位置:  开发笔记 > 编程语言 > 正文

计算算术平均值时,哪种求和方式更精确?

如何解决《计算算术平均值时,哪种求和方式更精确?》经验,为你挑选了1个好方法。

给定计算n IEEE 754双精度浮点数x 0,x 1,...,x n - 1的算术平均值的任务,是否更精确

(ksum i x i)/ n

(即首先进行所有x i的Kahan和,然后除以n)或

ksum i(x i/n)

(即首先将x i除以n然后进行Kahan求和)?

我自己的测试(在[0,1)中均匀分布的随机数和在0以σ= 1为中心的整个浮点数范围内的正态分布数字)是不确定的,表明两者都非常精确,但我选择的测试数据可能特别差.



1> Stephen Cano..:

首先求和,然后除.如果你先划分,然后在一般情况下求和,你会引入一个与最大幅度加法成比例的舍入误差,这大部分都会失去卡汉求和点(在灾难性取消的情况下,这是你要防范的,你的结果是除法的舍入误差.

首先总结确实存在过度溢出的风险; 处理正确的,你会被重新调整的确切幂的两成需要防止溢出.然而,这是非常罕见的,从来没有你需要担心的数据规模.

仅提供一个具体示例:考虑以双精度平均值4503599627370496,-4503599627370498和2.即使使用朴素求和,如果求和,则得到完全正确的结果(0).如果你除以然后求和,求和是完全的(通过Sterbenz'引理)然而错误仍然很大; 计算结果为-0.08333333333333337(这仅来自4503599627370496/3中的舍入误差;准确地说是-4503599627370498/3).

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有