This commit is contained in:
Jack Halford 2017-11-13 16:21:48 +01:00
parent 80837f0428
commit a926031dd0
3 changed files with 39 additions and 37 deletions

View file

@ -19,6 +19,7 @@
# include <errno.h> # include <errno.h>
# include <unistd.h> # include <unistd.h>
# include <stdio.h> # include <stdio.h>
# include <stdint.h>
# include <stdlib.h> # include <stdlib.h>
# include <time.h> # include <time.h>

View file

@ -17,7 +17,9 @@
# include <dlfcn.h> # include <dlfcn.h>
# include <math.h> # include <math.h>
extern struct s_stats { typedef struct s_rs t_rs;
struct s_rs {
int count; int count;
double min; double min;
double max; double max;
@ -25,10 +27,10 @@ extern struct s_stats {
double m; double m;
double stdev; double stdev;
double var; double var;
} g_rs; };
void rs_clear(); void rs_init(t_rs *rs);
void rs_push(double n); void rs_push(t_rs *rs, double n);
void rs_calcmore(); void rs_final(t_rs *rs);
#endif #endif

View file

@ -13,50 +13,49 @@
#include "libft.h" #include "libft.h"
#include <math.h> #include <math.h>
struct s_stats g_rs = {0, 0, 0, 0, 0, 0, 0};
double sqrt(double x); double sqrt(double x);
void rs_clear(void) void rs_init(t_rs *rs)
{ {
g_rs.count = 0; bzero(rs, sizeof(t_rs));
g_rs.min = DBL_MAX; rs->count = 0;
g_rs.max = -DBL_MAX; rs->min = DBL_MAX;
rs->max = -DBL_MAX;
} }
void rs_push(double n) void rs_push(t_rs *rs, double n)
{ {
double delta; double delta;
g_rs.count++; rs->count++;
n < g_rs.min ? g_rs.min = n : (0); n < rs->min ? rs->min = n : (0);
n > g_rs.max ? g_rs.max = n : (0); n > rs->max ? rs->max = n : (0);
if (g_rs.count == 1) if (rs->count == 1)
{ {
g_rs.avg = n; rs->avg = n;
g_rs.m = 0; rs->m = 0;
} }
else else
{ {
delta = n - g_rs.avg; delta = n - rs->avg;
g_rs.avg += delta / g_rs.count; rs->avg += delta / rs->count;
g_rs.m += delta * (n - g_rs.avg); rs->m += delta * (n - rs->avg);
} }
} }
void rs_calcmore(void) void rs_final(t_rs *rs)
{ {
if (g_rs.count == 0) if (rs->count == 0)
{ {
g_rs.min = 0; rs->min = 0;
g_rs.max = 0; rs->max = 0;
} }
if (g_rs.count < 2) if (rs->count < 2)
{ {
g_rs.var = 0; rs->var = 0;
g_rs.stdev = 0; rs->stdev = 0;
return ; return ;
} }
g_rs.var = g_rs.m / (g_rs.count - 1); rs->var = rs->m / (rs->count - 1);
g_rs.stdev = sqrt(g_rs.var); rs->stdev = sqrt(rs->var);
} }