Ryan Williams / spikes
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers statistics.cpp Source File

statistics.cpp

00001 #include "statistics.h"
00002 
00003 RunningStatistics :: RunningStatistics(int numSamples) {
00004     sum = 0;
00005     sumSquares = 0;
00006     average = 0;
00007     count = 0;
00008     samples = new double [numSamples];
00009     currentNdx = 0;
00010     sampleSize = numSamples;
00011 }
00012 
00013 
00014 double RunningStatistics :: addSample(double newSample) {
00015     double temp;
00016 
00017     if (count == sampleSize) {
00018         temp = samples[(currentNdx) % sampleSize];
00019         sum -= temp;
00020         sumSquares -= (temp * temp);
00021     }
00022     sum += newSample;
00023     sumSquares += (newSample * newSample);
00024     samples[currentNdx % sampleSize] = newSample;
00025     
00026     
00027     if (count < sampleSize) {
00028         ++count;
00029     }
00030     average = (sum / count);
00031     
00032     ++currentNdx;
00033     if (currentNdx >= sampleSize) {
00034         currentNdx = currentNdx % sampleSize;
00035     }
00036     return temp;
00037 }
00038 
00039 double RunningStatistics :: getAverage() {
00040     return average;
00041 }
00042 
00043 double RunningStatistics :: getStandardDeviation() {
00044     return sqrt((sumSquares - (count * average * average)) / (count - 1));
00045 }
00046 
00047 int RunningStatistics :: getCount() {
00048     return count;
00049 }
00050  
00051 double RunningStatistics :: getSum() {
00052     return sum;
00053 }
00054 
00055 void RunningStatistics :: reset() {
00056     delete [] samples;
00057     sum = 0;
00058     sumSquares = 0;
00059     average = 0;
00060     count = 0;
00061     samples = new double[sampleSize];
00062     currentNdx = 0;
00063 }