我正在尝试计算滚动平均值,并为了尝试并优化一下,我简化了计算,只有一个除法。当值减少时,存在一个点,当前值降低到小于平均值。在这一点上,平均值会跳跃。我想这是因为除法是无符号的,我的分子的符号位被解释为一个巨大的无符号数。我不确定需要在哪里进行无符号转换才能确保此问题不再出现。
unsigned int AverageUsage;
unsigned int TotalUsage;
unsigned int incCount;
AverageUsage = (TotalUsage - AverageUsage)/++incCount + AverageUsage;
AverageUsage始终为正数,但当TotalUsage低于AverageUsage时,对于除法运算我不确定会发生什么
AverageUsage = (signed int)(TotalUsage - AverageUsage)/++incCount + AverageUsage;
将分子设置为有符号数,但我不确定如何进行除法运算。
AverageUsage = (signed int)((signed int)(TotalUsage - AverageUsage)/++incCount) + AverageUsage;
这应该是可行的(我可以保证整个操作的结果永远不会是负数),但我担心当incCount达到一个“看起来”为负数的值时会出现问题。
有没有一个简单的解决方案,希望它:
- 不需要if语句
- 不需要QWORDs
谢谢!