大数据量下求均值的方法

问:请问在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  (注意要先除后乘,防止溢出)

原文链接: https://www.cnblogs.com/iroultron/archive/2013/06/13/3133973.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    大数据量下求均值的方法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/92070

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午1:29
下一篇 2023年2月10日 上午1:30

相关推荐