大数据量下求均值的方法

问:请问在C或C++中如何求N个数的平均值?这N个数直接相加肯定会溢出因为INT类型只有32位有什么好的算法可以求吗?

答:如果要特别精确的话,就要用字符串表示的大整数了,
如果不需要特别精确的话
用double加下面的公式还是比较接近结果的
假设前n个数值的平均值为V(n),第n+1个数为T, 则前n+1个数的平均值为:
V(n+1) = (T - V(n)) / (n + 1) + V(n)

 

另一种类似的思路:

假定是偶数个数字:
1     2     3     4     5     6     7     8
-------------------------------------------- 第一轮计算每两个数的平均值
1.5         3.5         5.5         7.5
-------------------------------------------- 第二轮计算每两个数的平均值
2.5                     6.5
-------------------------------------------- 第三轮计算每两个数的平均值
4.5 <-- 这就是最后的平均值
 
如果是奇数个数字
1     2     3     4     5     6     7     8     9
----------------------------------------------------- 第一轮计算每两个数的平均值,最后一个数字不算
1.5         3.5         5.5         7.5         9
----------------------------------------------------- 第二轮计算每两个数的平均值,最后一个数字不算
2.5                     6.5                     9
----------------------------------------------------- 第三轮计算每两个数的平均值,最后一个数字不算
4.5(权重是8/9)                                  9(权重是1/9)
 
所以平均值 = 4.5 / 9 * 8 + 9 / 9 * 1 = 5  (注意要先除后乘,防止溢出)
posted @ 2013-06-13 14:26  鸡蛋的冬天  阅读(2503)  评论(0)    收藏  举报