X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fmeans-calc.c;h=6aabbf50cbad1b8448eb3de326b882f43ce2f02e;hb=3f3b74c2dd0e8468e11b0bb22366f6081ba0d459;hp=54b4e9cce52bddfe3dd556b178dd3a0abe6f62d4;hpb=76ce1b51c803d48ff034d6f036768ce1af809945;p=pspp diff --git a/src/language/stats/means-calc.c b/src/language/stats/means-calc.c index 54b4e9cce5..6aabbf50cb 100644 --- a/src/language/stats/means-calc.c +++ b/src/language/stats/means-calc.c @@ -36,22 +36,26 @@ #define _(msgid) gettext (msgid) #define N_(msgid) (msgid) +/* A base struct for all statistics. */ struct statistic { }; +/* Statistics which accumulate a single value. */ struct statistic_simple { struct statistic parent; double acc; }; +/* Statistics based on moments. */ struct statistic_moment { struct statistic parent; struct moments1 *mom; }; + static struct statistic * default_create (struct pool *pool) { @@ -77,6 +81,8 @@ default_destroy (struct statistic *stat) moments1_destroy (pvd->mom); } + +/* Simple statistics have nothing to destroy. */ static void simple_destroy (struct statistic *stat UNUSED) { @@ -85,7 +91,7 @@ simple_destroy (struct statistic *stat UNUSED) /* HARMONIC MEAN: The reciprocal of the sum of the reciprocals: - 1 / ( 1/(x_0) + 1/(x_1) + ... + 1/(x_{n-1}) ) */ + 1 / (1/(x_0) + 1/(x_1) + ... + 1/(x_{n-1})) */ struct harmonic_mean { @@ -163,6 +169,10 @@ geometric_get (const struct statistic *pvd) +/* The getters for moment based statistics simply calculate the + moment. The only exception is Std Dev. which needs to call + sqrt as well. */ + static double sum_get (const struct statistic *pvd) { @@ -211,9 +221,6 @@ stddev_get (const struct statistic *pvd) return sqrt (variance_get (pvd)); } - - - static double skew_get (const struct statistic *pvd) { @@ -333,6 +340,8 @@ struct range double max; }; +/* Initially min and max are set to their most (inverted) extreme possible + values. */ static struct statistic * range_create (struct pool *pool) { @@ -344,6 +353,8 @@ range_create (struct pool *pool) return (struct statistic *) r; } +/* On each update, set min and max to X or leave unchanged, + as appropriate. */ static void range_update (struct statistic *pvd, double w UNUSED, double x) { @@ -356,6 +367,7 @@ range_update (struct statistic *pvd, double w UNUSED, double x) r->min = x; } +/* Get the difference between min and max. */ static double range_get (const struct statistic *pvd) {