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