Нужен код 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);
}