parent
59c93529e8
commit
407cc58f1f
Binary file not shown.
@ -0,0 +1,11 @@ |
|||||||
|
#include "stats.hpp" |
||||||
|
#include <fmt/core.h> |
||||||
|
#include "dbc.hpp" |
||||||
|
|
||||||
|
void Stats::dump(std::string msg) |
||||||
|
{ |
||||||
|
dbc::log($F("{}: sum: {}, sumsq: {}, n: {}, " |
||||||
|
"min: {}, max: {}, mean: {}, stddev: {}", |
||||||
|
msg, sum, sumsq, n, min, max, mean(), |
||||||
|
stddev())); |
||||||
|
} |
||||||
@ -0,0 +1,59 @@ |
|||||||
|
#pragma once |
||||||
|
#include <cmath> |
||||||
|
#include <chrono> |
||||||
|
|
||||||
|
struct Stats { |
||||||
|
using TimeBullshit = std::chrono::time_point<std::chrono::high_resolution_clock>; |
||||||
|
|
||||||
|
double sum = 0.0; |
||||||
|
double sumsq = 0.0; |
||||||
|
double n = 0.0; |
||||||
|
double min = 0.0; |
||||||
|
double max = 0.0; |
||||||
|
|
||||||
|
inline void reset() { |
||||||
|
sum = 0.0; |
||||||
|
sumsq = 0.0; |
||||||
|
n = 0.0; |
||||||
|
min = 0.0; |
||||||
|
max = 0.0; |
||||||
|
} |
||||||
|
|
||||||
|
inline double mean() { |
||||||
|
return sum / n; |
||||||
|
} |
||||||
|
|
||||||
|
inline double stddev() { |
||||||
|
return std::sqrt((sumsq - (sum * sum / n)) / (n - 1)); |
||||||
|
} |
||||||
|
|
||||||
|
inline void sample(double s) { |
||||||
|
sum += s; |
||||||
|
sumsq += s * s; |
||||||
|
|
||||||
|
if (n == 0) { |
||||||
|
min = s; |
||||||
|
max = s; |
||||||
|
} else { |
||||||
|
if (min > s) min = s; |
||||||
|
if (max < s) max = s; |
||||||
|
} |
||||||
|
|
||||||
|
n += 1; |
||||||
|
} |
||||||
|
|
||||||
|
inline TimeBullshit time_start() { |
||||||
|
return std::chrono::high_resolution_clock::now(); |
||||||
|
} |
||||||
|
|
||||||
|
inline void sample_time(TimeBullshit start) { |
||||||
|
auto end = std::chrono::high_resolution_clock::now(); |
||||||
|
auto elapsed = std::chrono::duration<double>(end - start); |
||||||
|
|
||||||
|
if(elapsed.count() > 0.0) { |
||||||
|
sample(1.0/elapsed.count()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void dump(std::string msg=""); |
||||||
|
}; |
||||||
Loading…
Reference in new issue