From d86971592ad3a12f6c5afba10ecd920d32331a22 Mon Sep 17 00:00:00 2001 From: Charlie Groves Date: Fri, 22 Jan 2010 02:46:06 +0000 Subject: [PATCH] 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 --- .../com/threerings/util/MethodProfiler.java | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/java/com/threerings/util/MethodProfiler.java b/src/java/com/threerings/util/MethodProfiler.java index 3ef98fa56..bc55ed32b 100644 --- a/src/java/com/threerings/util/MethodProfiler.java +++ b/src/java/com/threerings/util/MethodProfiler.java @@ -331,17 +331,12 @@ public class MethodProfiler */ public void addSample (double time) { - if (_numSamples == 0) { - _numSamples = 1; - _average = time; - _variance = 0; - return; - } - _numSamples = _numSamples + 1; - double oldAverage = _average; - _average += (time - _average) / _numSamples; - double baseVariance = time - oldAverage; - _variance += (_numSamples - 1) * baseVariance * baseVariance / _numSamples; + // From http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm + _numSamples++; + double deltaToOld = time - _average; + _average += deltaToOld / _numSamples; + double deltaToNew = time - _average; + _varianceSum += deltaToOld * deltaToNew; } /** @@ -349,12 +344,12 @@ public class MethodProfiler */ 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 double _average; - protected double _variance; + protected double _varianceSum; } /**