class MovingStat { public: MovingStat() : m_n(0), n(0) {} void Clear() { m_n = 0; } void SetN(int i) {n=i;}; int GetN() {return n;}; inline void Calc(double x) { if (m_n 0) ? m_newM/m_n : 0.0; } double M2() const { return ( (m_n > 1) ? m_newM2/m_n : 0.0 ); } inline double Variance() const { return ( (m_n > 1) ? (M2()-Mean()*Mean()) : 0.0 ); } inline double StandardDeviation() const { return ( (Variance() > 0) ? sqrt( Variance() ) : -1 ); } private: int n; int m_n; double m_oldM, m_newM, m_oldM2, m_newM2; };