Я пытаюсь вычислить скользящее среднее, и, чтобы попытаться получить и оптимизировать немного, я упростил вычисление, так что есть только одно деление.Когда значение уменьшается, возникает момент, когда текущее значение снижается до уровня ниже среднего.На данный момент средний скачок.Я предполагаю, что это потому, что деление не подписано, а бит знака моего числителя интерпретируется как массивное число без знака.Я просто не уверен, куда мне нужно бросить unsigned, чтобы эта проблема не появлялась.
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
Спасибо!