namespace Utils
{
public static class RollingAverage
{
/// Value of average before new value is added.
/// Number of values in average after new value is added.
/// New value to be added.
/// New average value.
/// newNumberOfValues must be 1 or greater.
public static float GetNewAverage(float currentAverage, int newNumberOfValues, float newValue)
{
if (newNumberOfValues < 1) throw new Exception("Should be at least 1 value.");
float n = newNumberOfValues;
var originalValue = currentAverage;
var originalValueWeight = ((n - 1.0f) / n);
var newValueWeight = (1.0f / n);
return (originalValue * originalValueWeight) + (newValue * newValueWeight);
}
}
}