如何求平均数

来源:百度知道 编辑:UC知道 时间:2024/06/08 05:42:01
double a[500];求该数组平均数,要求尽可能保证精度,能准确检测到溢出,还要保证算法的效率不能太低。

找过很多算法, 可以考虑动态分段求平均,再平均,等.但是经检验, 还是下面这种方法最好!

先估一个平均值,然后一个个减,多退少补

ave=a[0];
sum=0;
for (i=1;i<n;i++)
{
sum+= (a[i]-ave);
while ( sum>=i)
{
ave++;
sum-=i;
}
while ( sum <= -i)
{
ave--;
sum+=i;
}
}
ave=ave+sum/n;
return ave;

说明:一开始两个while 循环可能被频繁的执行,随着统计过的数的个数逐渐增大,平均值趋于稳定,while 语句很少被执行,因此这个算法是一个o(n)的算法,速度很快,且非常精确。