思想参考:方差和平均值迭代计算推导_均值和方差迭代计算公式_yoyocry的博客-CSDN博客
得到公式:
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
int iter_avg(int prev_avg, int curr_val, int curr_idx)
{
return prev_avg + (curr_val - prev_avg) / (curr_idx + 1);
}
int main(int argc, char *argv[])
{
int num, sum, i, avg, *array;
struct timeval tv;
if (argc < 2) {
printf("./iter_avg.exe <N>\n");
return -1;
}
num = strtoul(argv[1], NULL, 0);
if (!(array = (int *)malloc(num * sizeof(int)))) {
printf("malloc array failed\n");
return -1;
}
sum = 0;
avg = 0;
gettimeofday(&tv, NULL);
printf("sec: %ld\n", tv.tv_sec);
srand(tv.tv_sec);
for (i = 0; i < num; ++i) {
array[i] = rand() & 0xffff;
printf("%d ", array[i]);
avg = iter_avg(avg, array[i], i);
sum += array[i];
}
printf("\n");
printf("iter avg : %d\n", avg);
printf("sum avg : %d\n", sum / num);
return 0;
}