#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)
{
moments1_destroy (pvd->mom);
}
+
+/* Simple statistics have nothing to destroy. */
static void
simple_destroy (struct statistic *stat UNUSED)
{
\f
/* 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
{
\f
+/* 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)
{
return sqrt (variance_get (pvd));
}
-
-\f
-
static double
skew_get (const struct statistic *pvd)
{
double max;
};
+/* Initially min and max are set to their most (inverted) extreme possible
+ values. */
static struct statistic *
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)
{
r->min = x;
}
+/* Get the difference between min and max. */
static double
range_get (const struct statistic *pvd)
{
{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