123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include <math.h>
- #include "stat.h"
- void update_stats(struct stats *stats, u64 val)
- {
- double delta;
- stats->n++;
- delta = val - stats->mean;
- stats->mean += delta / stats->n;
- stats->M2 += delta*(val - stats->mean);
- }
- double avg_stats(struct stats *stats)
- {
- return stats->mean;
- }
- /*
- * http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
- *
- * (\Sum n_i^2) - ((\Sum n_i)^2)/n
- * s^2 = -------------------------------
- * n - 1
- *
- * http://en.wikipedia.org/wiki/Stddev
- *
- * The std dev of the mean is related to the std dev by:
- *
- * s
- * s_mean = -------
- * sqrt(n)
- *
- */
- double stddev_stats(struct stats *stats)
- {
- double variance, variance_mean;
- if (!stats->n)
- return 0.0;
- variance = stats->M2 / (stats->n - 1);
- variance_mean = variance / stats->n;
- return sqrt(variance_mean);
- }
- double rel_stddev_stats(double stddev, double avg)
- {
- double pct = 0.0;
- if (avg)
- pct = 100.0 * stddev/avg;
- return pct;
- }
|