整数的加权平均值
|
情况:我们有一个基于整数的微控制器,我们需要计算加权平均值(例如权重32,如31-1),并将其存储在数组中。
最终代码将在C中。
(并且请确保这不是家庭作业:))
我们正在考虑将模数除法的结果与结果的权重(平均值计算)一起存储,并在下一轮中将其用作附加数据。
如果我们有浮点数,它将是这样的:
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;
但这似乎给了我错误的结果,而且我真的对实现感到困惑。
有人有想法吗?
编辑
非常感谢您的快速回复,尽管我可能还没有足够清楚地问过这个问题:我们需要根据先前的平均值和当前样本得出所需的权重。
没有找到相关结果
已邀请:
4 个回复
禽兢玫坞劲
与常规加权过滤器的区别在于,将sample_weighted值乘以COEFFICIENT。这样,就可以使用整数计算而不会舍入错误,而不会导致舍入错误而导致计算结果卡在错误的值上。 检索输出值时,将对整数值进行四舍五入并对此乘法进行补偿。 我认为此实现更具可读性,但确实存在缺点,即使用除法而不是移位。如果COEFFICIENT为2的幂,大多数编译器将足够聪明,可以使用位移。
誓猎贰
显然,
必须是足够大的数据类型。没有办法解决。
遣莫捅炭
傻零凰死授