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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user