#pragma once #include #include #include "stats.hpp" struct WelfordStats { double Mean = 0.0; // LOL double n = 0.0; double M2 = 0.0; double min = 0.0; double max = 0.0; inline void reset() { Mean = 0.0; n = 0.0; M2 = 0.0; min = 0.0; max = 0.0; } inline double mean() { return Mean; } inline double stddev() { return std::sqrt(variance()); } inline double variance() { return M2 / n; } inline double sample_variance() { return M2 / (n - 1); } inline void sample(double s) { n += 1; double old_mean = Mean; Mean += (s - Mean) / n; M2 += (s - old_mean) * (s - Mean); if (n == 0) { min = s; max = s; } else { if (min > s) min = s; if (max < s) max = s; } } TTest t_test(WelfordStats& other); };