X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fmeans-calc.c;h=6aabbf50cbad1b8448eb3de326b882f43ce2f02e;hb=422944fc7812cf13e616348412fecdbd85670e06;hp=5a3c205b97788d3672c09d238e68ab8058d597d3;hpb=fd8e27f58ebe1bd2cb28dbb5a91690310441c9cd;p=pspp diff --git a/src/language/stats/means-calc.c b/src/language/stats/means-calc.c index 5a3c205b97..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) { @@ -435,11 +447,11 @@ const struct cell_spec cell_spec[n_MEANS_STATISTICS] = { {N_("Minimum"), "MIN", NULL , min_create, min_update, min_get, simple_destroy}, {N_("Maximum"), "MAX", NULL , max_create, max_update, max_get, simple_destroy}, {N_("Range"), "RANGE", NULL , range_create, range_update, range_get, simple_destroy}, - {N_("Variance"), "VARIANCE", NULL , default_create, default_update, variance_get, default_destroy}, - {N_("Kurtosis"), "KURT", NULL , default_create, default_update, kurt_get, default_destroy}, - {N_("S.E. Kurt"), "SEKURT", NULL , default_create, default_update, sekurt_get, default_destroy}, - {N_("Skewness"), "SKEW", NULL , default_create, default_update, skew_get, default_destroy}, - {N_("S.E. Skew"), "SESKEW", NULL , default_create, default_update, seskew_get, default_destroy}, + {N_("Variance"), "VARIANCE", PIVOT_RC_OTHER, default_create, default_update, variance_get, default_destroy}, + {N_("Kurtosis"), "KURT", PIVOT_RC_OTHER, default_create, default_update, kurt_get, default_destroy}, + {N_("S.E. Kurt"), "SEKURT", PIVOT_RC_OTHER, default_create, default_update, sekurt_get, default_destroy}, + {N_("Skewness"), "SKEW", PIVOT_RC_OTHER, default_create, default_update, skew_get, default_destroy}, + {N_("S.E. Skew"), "SESKEW", PIVOT_RC_OTHER, default_create, default_update, seskew_get, default_destroy}, {N_("First"), "FIRST", NULL , first_create, first_update, first_get, simple_destroy}, {N_("Last"), "LAST", NULL , last_create, last_update, last_get, simple_destroy}, #if 0