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