// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #include #include // ------------------------------------------------------------------------- fpa::Common::IncrementalMeanAndVariance:: IncrementalMeanAndVariance( ) { this->Clear( ); } // ------------------------------------------------------------------------- fpa::Common::IncrementalMeanAndVariance:: ~IncrementalMeanAndVariance( ) { } // ------------------------------------------------------------------------- double fpa::Common::IncrementalMeanAndVariance:: GetMean( ) const { return( this->m_M ); } // ------------------------------------------------------------------------- double fpa::Common::IncrementalMeanAndVariance:: GetVariance( ) const { return( this->m_V ); } // ------------------------------------------------------------------------- double fpa::Common::IncrementalMeanAndVariance:: GetDeviation( ) const { return( std::sqrt( this->m_V ) ); } // ------------------------------------------------------------------------- unsigned long fpa::Common::IncrementalMeanAndVariance:: GetNumberOfSamples( ) const { return( ( unsigned long )( this->m_N ) ); } // ------------------------------------------------------------------------- void fpa::Common::IncrementalMeanAndVariance:: Clear( ) { this->m_M = double( 0 ); this->m_V = double( 0 ); this->m_N = double( 0 ); } // ------------------------------------------------------------------------- void fpa::Common::IncrementalMeanAndVariance:: AddValue( double v ) { this->m_N += double( 1 ); double d = v - this->m_M; if( this->m_N > double( 1 ) ) { double o = ( this->m_N - double( 2 ) ) / ( this->m_N - double( 1 ) ); this->m_V = ( o * this->m_V ) + ( ( d * d ) / this->m_N ); } else this->m_V = double( 0 ); this->m_M += d / this->m_N; } // eof - $RCSfile$