You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.4 KiB
79 lines
1.4 KiB
|
2 months ago
|
#pragma once
|
||
|
|
#include <cmath>
|
||
|
|
#include <chrono>
|
||
|
1 month ago
|
#include <fmt/core.h>
|
||
|
2 months ago
|
|
||
|
2 months ago
|
struct TTest {
|
||
|
|
double t_stat = 0.0;
|
||
|
|
double dof = 0.0;
|
||
|
|
double p_val = 0.0;
|
||
|
|
};
|
||
|
|
|
||
|
2 months ago
|
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(variance());
|
||
|
|
}
|
||
|
|
|
||
|
|
inline double variance() {
|
||
|
2 months ago
|
return (sumsq - (sum * sum / n)) / n;
|
||
|
|
}
|
||
|
|
|
||
|
|
inline double sample_variance() {
|
||
|
2 months ago
|
return (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);
|
||
|
|
|
||
|
1 month ago
|
auto as_ms = std::chrono::duration_cast<std::chrono::nanoseconds>(elapsed);
|
||
|
|
|
||
|
2 months ago
|
if(elapsed.count() > 0.0) {
|
||
|
|
sample(1.0/elapsed.count());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void dump(std::string msg="");
|
||
|
|
|
||
|
2 months ago
|
TTest t_test(Stats& other);
|
||
|
2 months ago
|
};
|