Ситуация: у нас есть целочисленный микроконтроллер, и нам нужно вычислить средневзвешенное значение (например, вес 32, например, 31-1) и сохранить его в массиве.
Окончательный код будет в C.
(И, чтобы быть уверенным, это не домашняя работа :))
Мы думали сохранить результат деления модуля на вес на результате (avg calc) и использовать его в следующем раунде в качестве дополнительных данных.
Если бы у нас был float, это было бы так:
avg[i] = ( avg[i-1] * (WEIGHT-1) + measured ) / WEIGHT;
Поскольку мы этого не делаем, я подумал:
pt = (mod == 0) ? WEIGHT-1 : WEIGHT-2;
tmp = avg[i-1] * pt + mod + measured;
avg[i] = tmp / WEIGHT;
mod = tmp % WEIGHT;
Но это, кажется, дает мне ложные результаты, и я действительно застрял с реализацией.
У кого-нибудь есть идеи?
EDIT
Большое спасибо за быстрые ответы, хотя, возможно, я не задал вопрос достаточно ясно: у нас есть коэффициент необходимого веса от предыдущего среднего значения и текущей выборки.