大数据量下求均值的方法
问:请问在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 (注意要先除后乘,防止溢出)
浙公网安备 33010602011771号