我正在尝试计算滚动平均值,并试图获得并优化一点,我简化了计算,因此只有一个除法.当值减小时,存在当前值降低到小于平均值的点.此时平均跳跃.我想这是因为除法是无符号的,我的分子符号位被解释为一个大的无符号数.我只是不确定我需要在哪里投贴无符号以确保此问题不再出现.
unsigned int AverageUsage;
unsigned int TotalUsage;
unsigned int incCount;
AverageUsage = (TotalUsage - AverageUsage)/++incCount + AverageUsage;
Run Code Online (Sandbox Code Playgroud)
AverageUsage将始终为正,但当TotalUsage低于AverageUsage时,我不确定该部门会有什么期望
AverageUsage = (signed int)(TotalUsage - AverageUsage)/++incCount + AverageUsage;
Run Code Online (Sandbox Code Playgroud)
将分子设置为已签名,但我不确定如何进行除法.
AverageUsage = (signed int)((signed int)(TotalUsage - AverageUsage)/++incCount) + AverageUsage;
Run Code Online (Sandbox Code Playgroud)
应该工作(我可以保证这个完整操作的结果永远不会是负面的),但我担心incCount达到"看起来"负面的值的情况.
是否有一个简单的解决方案,希望:
谢谢!
即
subs r2, r2, #(32)
Run Code Online (Sandbox Code Playgroud)
与
subs r2, r2, #32
Run Code Online (Sandbox Code Playgroud)
如果你有一个来源我很乐意看到它,因为我找不到任何提及它.
谢谢!