.. _program_listing_file__tmp_ws_src_ecl_core_ecl_statistics_include_ecl_statistics_cumulative_statistics.hpp: Program Listing for File cumulative_statistics.hpp ================================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/ecl_core/ecl_statistics/include/ecl/statistics/cumulative_statistics.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /***************************************************************************** ** Ifdefs *****************************************************************************/ #ifndef ecl_statistics_CUMULATIVE_STATISTICS_HPP_ #define ecl_statistics_CUMULATIVE_STATISTICS_HPP_ /***************************************************************************** ** Includes *****************************************************************************/ #include #include /***************************************************************************** ** Namespaces *****************************************************************************/ namespace ecl { /***************************************************************************** ** Interfaces *****************************************************************************/ template class CumulativeStatistics : public ecl::FailedObject {}; template class CumulativeStatistics >::type> { public: CumulativeStatistics(): number_of_data(0.0) {} void clear() { number_of_data = 0.0; } void push_back(const T & x) { number_of_data++; if(number_of_data == 1.0) { old_mean = new_mean = x; old_variance = 0.0; } else { new_mean = old_mean + static_cast(x - old_mean) / static_cast(number_of_data); new_variance = old_variance + static_cast(x - old_mean) * static_cast(x - new_mean); old_mean = new_mean; old_variance = new_variance; } } T size() const { return static_cast(number_of_data); } T mean() const { return (number_of_data > 0) ? new_mean : 0.0; } T variance() const { return ((number_of_data > 1) ? new_variance / (number_of_data - 1) : 0.0); } private: T number_of_data; T old_mean, old_variance; T new_mean, new_variance; }; /***************************************************************************** ** Trailers *****************************************************************************/ } // namespace ecl #endif /* ecl_statistics_CUMULATIVE_STATISTICS_HPP_ */