Tob*_*ner 19 c++ numerical-methods
什么是计算平均值的最佳方法?有了这个问题,我想知道在数值意义上用于计算平均值的算法是最好的.它应该具有最小的舍入误差,不应对上溢或下溢等敏感.
谢谢.
附加信息:首选增量方法,因为值的数量可能不适合RAM(对大于4 GB的文件进行多次并行计算).
你可以看一下http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.43.3535(Nick Higham,"浮点求和的准确性",SIAM Journal of Scientific Computation,1993) .
如果我没记错的话,如果所有数字都是正数,则补偿求和(Kahan求和)是好的,至少与排序它们并按升序添加它们一样好(除非有非常多的数字).如果有些数字为正数且有些数字为负数,则故事要复杂得多,以便取消.在这种情况下,有一个参数可以按降序添加它们.
我总是使用以下伪代码:
float mean=0.0; // could use doulbe
int n=0; // could use long
for each x in data:
++n;
mean+=(x-mean)/n;
Run Code Online (Sandbox Code Playgroud)
我没有其稳定性的正式证明,但您可以看到,假设数据值表现良好,我们不会遇到数值溢出问题。高德纳 (Knuth) 的《计算机编程艺术》中提到了这一点
| 归档时间: |
|
| 查看次数: |
6987 次 |
| 最近记录: |