Merge tag 'locks-v3.16-2' of git://git.samba.org/jlayton/linux
[linux/fpc-iii.git] / tools / perf / util / stat.c
blob6506b3dfb6059f71aa6c345df21fcbc16e651604
1 #include <math.h>
3 #include "stat.h"
5 void update_stats(struct stats *stats, u64 val)
7 double delta;
9 stats->n++;
10 delta = val - stats->mean;
11 stats->mean += delta / stats->n;
12 stats->M2 += delta*(val - stats->mean);
14 if (val > stats->max)
15 stats->max = val;
17 if (val < stats->min)
18 stats->min = val;
21 double avg_stats(struct stats *stats)
23 return stats->mean;
27 * http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
29 * (\Sum n_i^2) - ((\Sum n_i)^2)/n
30 * s^2 = -------------------------------
31 * n - 1
33 * http://en.wikipedia.org/wiki/Stddev
35 * The std dev of the mean is related to the std dev by:
37 * s
38 * s_mean = -------
39 * sqrt(n)
42 double stddev_stats(struct stats *stats)
44 double variance, variance_mean;
46 if (stats->n < 2)
47 return 0.0;
49 variance = stats->M2 / (stats->n - 1);
50 variance_mean = variance / stats->n;
52 return sqrt(variance_mean);
55 double rel_stddev_stats(double stddev, double avg)
57 double pct = 0.0;
59 if (avg)
60 pct = 100.0 * stddev/avg;
62 return pct;