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); } } }