Use the rolling variance calculation from http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm as whatever one is in here currently was getting out of whack in biteme

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6017 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Charlie Groves
2010-01-22 02:46:06 +00:00
parent 1926012bc5
commit d86971592a
@@ -331,17 +331,12 @@ public class MethodProfiler
*/ */
public void addSample (double time) public void addSample (double time)
{ {
if (_numSamples == 0) { // From http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm
_numSamples = 1; _numSamples++;
_average = time; double deltaToOld = time - _average;
_variance = 0; _average += deltaToOld / _numSamples;
return; double deltaToNew = time - _average;
} _varianceSum += deltaToOld * deltaToNew;
_numSamples = _numSamples + 1;
double oldAverage = _average;
_average += (time - _average) / _numSamples;
double baseVariance = time - oldAverage;
_variance += (_numSamples - 1) * baseVariance * baseVariance / _numSamples;
} }
/** /**
@@ -349,12 +344,12 @@ public class MethodProfiler
*/ */
public Result toResult () public Result toResult ()
{ {
return new Result(_numSamples, _average, Math.sqrt(_variance / _numSamples)); return new Result(_numSamples, _average, Math.sqrt(_varianceSum / _numSamples));
} }
protected int _numSamples; protected int _numSamples;
protected double _average; protected double _average;
protected double _variance; protected double _varianceSum;
} }
/** /**