我以前用过这个,但是记不起来了,在任何地方找不到它。
这是一个运行平均值,其中最新值的重量是所有先前值(组合)的两倍,因此随着时间的推移,最旧的值的影响越来越小。而且我没有足够的内存来存储较旧的值。
获得平均值:
int sum=0;
int n = 0;
float aver = 0;
for(;;){
float new_value = some_function();
sum += new_value;
++n;
aver = sum / n;
}
但是如何得到一个平均值,其中new_value的加权值是前一次平均值的两倍?
float aver = 0;
for(;;){
float new_value = some_function();
aver = aver * ??? + new_value * ???;
}
答案 0 :(得分:3)
一个运行平均值,其中最新值的值是所有先前值的两倍,...
如何获得
new_value
加权为前一平均值加权的两倍的平均值?
计算总和和最新的特殊平均值。
int sum = 0;
int n = 0;
float average_special = 0.0;
for(;;) {
float new_value = some_function();
sum += new_value;
++n;
average_special = (sum + new_value) / (n+1);
}