File indexing completed on 2025-08-06 08:17:52
0001 #include "MbdRunningStats.h"
0002 #include <limits>
0003 #include <cmath>
0004 #include <iostream>
0005
0006 MbdRunningStats::MbdRunningStats(const unsigned int imaxnum) :
0007 maxnum{imaxnum}
0008 {
0009 Clear();
0010 }
0011
0012 void MbdRunningStats::Clear()
0013 {
0014 while ( !values.empty() )
0015 {
0016 values.pop();
0017 }
0018 S1 = S2 = 0.0;
0019 }
0020
0021 void MbdRunningStats::Push(double x)
0022 {
0023 if ( Size() == maxnum )
0024 {
0025 double lastval = values.front();
0026 values.pop();
0027 S1 -= lastval;
0028 S2 -= (lastval*lastval);
0029 }
0030
0031 values.push(x);
0032 S1 += x;
0033 S2 += (x*x);
0034 }
0035
0036 double MbdRunningStats::Mean() const
0037 {
0038 if ( values.empty() )
0039 {
0040
0041
0042 return 0.;
0043 }
0044
0045 return S1/values.size();
0046 }
0047
0048 double MbdRunningStats::Variance() const
0049 {
0050 if ( values.empty() )
0051 {
0052
0053
0054 return 0.;
0055 }
0056
0057 double var = (S2/values.size()) - (Mean()*Mean());
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068 return var;
0069 }
0070
0071 double MbdRunningStats::StandardDeviation() const
0072 {
0073 return sqrt( Variance() );
0074 }
0075
0076 double MbdRunningStats::RMS() const
0077 {
0078 return sqrt( Variance() );
0079 }
0080