Merge tag 'sound-3.17-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[deliverable/linux.git] / tools / perf / util / stat.c
CommitLineData
0007ecea
XG
1#include <math.h>
2
3#include "stat.h"
4
5void update_stats(struct stats *stats, u64 val)
6{
7 double delta;
8
9 stats->n++;
10 delta = val - stats->mean;
11 stats->mean += delta / stats->n;
12 stats->M2 += delta*(val - stats->mean);
ffe4f3c0
DA
13
14 if (val > stats->max)
15 stats->max = val;
16
17 if (val < stats->min)
18 stats->min = val;
0007ecea
XG
19}
20
21double avg_stats(struct stats *stats)
22{
23 return stats->mean;
24}
25
26/*
27 * http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
28 *
29 * (\Sum n_i^2) - ((\Sum n_i)^2)/n
30 * s^2 = -------------------------------
31 * n - 1
32 *
33 * http://en.wikipedia.org/wiki/Stddev
34 *
35 * The std dev of the mean is related to the std dev by:
36 *
37 * s
38 * s_mean = -------
39 * sqrt(n)
40 *
41 */
42double stddev_stats(struct stats *stats)
43{
44 double variance, variance_mean;
45
45528f7c 46 if (stats->n < 2)
0007ecea
XG
47 return 0.0;
48
49 variance = stats->M2 / (stats->n - 1);
50 variance_mean = variance / stats->n;
51
52 return sqrt(variance_mean);
53}
54
55double rel_stddev_stats(double stddev, double avg)
56{
57 double pct = 0.0;
58
59 if (avg)
60 pct = 100.0 * stddev/avg;
61
62 return pct;
63}
This page took 0.11332 seconds and 5 git commands to generate.