Нужен код C, чтобы получить средневзвешенное значение, где последнее значение взвешено вдвое больше, чем все предыдущие?

Я использовал это раньше, но просто не могу вспомнить это и не могу найти это нигде.

Это скользящее среднее, где новейшее значение имеет удвоенный вес всех предыдущих значений (вместе взятых), так что с течением времени самые старые значения оказывают все меньшее и меньшее влияние. И у меня недостаточно памяти для хранения старых значений.

ПОЛУЧИТЬ СРЕДНЮЮ:

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 ответ

Решение

скользящее среднее, где новейшее значение имеет удвоенный вес всех предыдущих значений,...

как получить среднее где 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);  
}
Другие вопросы по тегам