X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/825abbb3bde6c35ab1d1cdfba25fba4be5dcea2f..3cd6600dbcb87137c7adde8e4e310aefaea2a2e7:/statistics.h?ds=sidebyside diff --git a/statistics.h b/statistics.h index 2978747..78f93e3 100644 --- a/statistics.h +++ b/statistics.h @@ -1,29 +1,47 @@ #ifndef STATISTICS_H #define STATISTICS_H -#include +#include +#include class statistics { public: - statistics(); - - void reset(); - void push(double value); - - size_t get_count(); - double get_sum(); - double get_avg(); - double get_stddev(); + statistics() + : count(0) + , min(std::numeric_limits::infinity()) + , max(-std::numeric_limits::infinity()) + , sum(0.0) + , mean(0.0) + , sqdiff_sum(0.0) + { } + + void push(double x) { + double delta = x - mean; + ++count; + if (x < min) + min = x; + if (x > max) + max = x; + sum += x; + mean = sum / count; + sqdiff_sum += delta * (x - mean); + } + + unsigned get_count() const { return count; } + double get_min() const { return min; } + double get_max() const { return max; } + double get_sum() const { return sum; } + double get_mean() const { return mean; } + double get_variance() const { return sqdiff_sum / count; } + double get_stddev() const { return std::sqrt(get_variance()); } private: - bool up2date; - - std::vector values; - double sum; - double avg; - double stddev; - - void update(); + int count; + double min; // min of x_i + double max; // max of x_i + double sum; // sum of x_i + double mean; // mean of x_i + double sqdiff_sum; // sum of (x_i - mean)^2 }; #endif // !STATISTICS_H