Я пытаюсь рассчитать скользящее среднее, и, чтобы попытаться немного оптимизировать, я упростил расчет, так что есть только одно деление. Когда значение уменьшается, существует точка, в которой текущее значение снижается до уровня ниже среднего. В этот момент средний скачок. Я предполагаю, что это связано с тем, что деление беззнаковое, а бит знака моего числителя интерпретируется как массивное число без знака. Я просто не уверен, где мне нужно использовать unsigned, чтобы эта проблема больше не появлялась.
unsigned int AverageUsage;
unsigned int TotalUsage;
unsigned int incCount;
AverageUsage = (TotalUsage - AverageUsage)/++incCount + AverageUsage;
Среднее использование всегда будет положительным, но когда общее использование упадет ниже среднего, я не уверен, чего ожидать от деления.
AverageUsage = (signed int)(TotalUsage - AverageUsage)/++incCount + AverageUsage;
Установит числитель со знаком, но я не уверен, как будет происходить деление.
AverageUsage = (signed int)((signed int)(TotalUsage - AverageUsage)/++incCount) + AverageUsage;
Должен работать (я могу гарантировать, что результат этой полной операции никогда не будет отрицательным), но меня беспокоят случаи, когда значение incCount достигает значения, которое «выглядит» отрицательным.
Есть ли простое решение для этого, которое, надеюсь:
- Не нуждается в операторе if
- Не требует QWORD
Спасибо!