Found my online stats calc code. It's in C but I can rework it. This should work better for FPS calc.
parent
7a74877849
commit
e3e0f0a322
@ -0,0 +1,65 @@ |
||||
#include <math.h> |
||||
#include <lcthw/stats.h> |
||||
#include <stdlib.h> |
||||
#include <lcthw/dbg.h> |
||||
|
||||
Stats *Stats_recreate(double sum, double sumsq, unsigned long n, |
||||
double min, double max) |
||||
{ |
||||
Stats *st = malloc(sizeof(Stats)); |
||||
check_mem(st); |
||||
|
||||
st->sum = sum; |
||||
st->sumsq = sumsq; |
||||
st->n = n; |
||||
st->min = min; |
||||
st->max = max; |
||||
|
||||
return st; |
||||
|
||||
error: |
||||
return NULL; |
||||
} |
||||
|
||||
Stats *Stats_create() |
||||
{ |
||||
return Stats_recreate(0.0, 0.0, 0L, 0.0, 0.0); |
||||
} |
||||
|
||||
double Stats_mean(Stats * st) |
||||
{ |
||||
return st->sum / st->n; |
||||
} |
||||
|
||||
double Stats_stddev(Stats * st) |
||||
{ |
||||
return sqrt((st->sumsq - (st->sum * st->sum / st->n)) / |
||||
(st->n - 1)); |
||||
} |
||||
|
||||
void Stats_sample(Stats * st, double s) |
||||
{ |
||||
st->sum += s; |
||||
st->sumsq += s * s; |
||||
|
||||
if (st->n == 0) { |
||||
st->min = s; |
||||
st->max = s; |
||||
} else { |
||||
if (st->min > s) |
||||
st->min = s; |
||||
if (st->max < s) |
||||
st->max = s; |
||||
} |
||||
|
||||
st->n += 1; |
||||
} |
||||
|
||||
void Stats_dump(Stats * st) |
||||
{ |
||||
fprintf(stderr, |
||||
"sum: %f, sumsq: %f, n: %ld, " |
||||
"min: %f, max: %f, mean: %f, stddev: %f", |
||||
st->sum, st->sumsq, st->n, st->min, st->max, Stats_mean(st), |
||||
Stats_stddev(st)); |
||||
} |
@ -0,0 +1,25 @@ |
||||
#ifndef lcthw_stats_h |
||||
#define lcthw_stats_h |
||||
|
||||
typedef struct Stats { |
||||
double sum; |
||||
double sumsq; |
||||
unsigned long n; |
||||
double min; |
||||
double max; |
||||
} Stats; |
||||
|
||||
Stats *Stats_recreate(double sum, double sumsq, unsigned long n, |
||||
double min, double max); |
||||
|
||||
Stats *Stats_create(); |
||||
|
||||
double Stats_mean(Stats * st); |
||||
|
||||
double Stats_stddev(Stats * st); |
||||
|
||||
void Stats_sample(Stats * st, double s); |
||||
|
||||
void Stats_dump(Stats * st); |
||||
|
||||
#endif |
Loading…
Reference in new issue