如何获得加权平均值,其中最新值加权前两次?

时间:2016-12-21 18:25:27

标签: c algorithm weighted-average

我以前用过这个,但是记不起来了,在任何地方找不到它。

这是一个运行平均值,其中最新值的重量是所有先前值(组合)的两倍,因此随着时间的推移,最旧的值的影响越来越小。而且我没有足够的内存来存储较旧的值。

获得平均值:

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 * ???;

}

1 个答案:

答案 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);  
}