1 | /* -*- mode: C; c-basic-offset: 2; indent-tabs-mode: nil; -*- */ |
---|---|
2 | |
3 | #include <math.h> |
4 | #include "variable.h" |
5 | |
6 | void |
7 | variable_init (Variable *variable) |
8 | { |
9 | variable->weight = 0.0; |
10 | variable->sum = 0.0; |
11 | variable->sum2 = 0.0; |
12 | } |
13 | |
14 | void |
15 | variable_add_weighted (Variable *variable, |
16 | double value, |
17 | double weight) |
18 | { |
19 | variable->weight += weight; |
20 | variable->sum += weight * value; |
21 | variable->sum2 += weight * value * value; |
22 | } |
23 | |
24 | void |
25 | variable_add (Variable *variable, |
26 | double value) |
27 | { |
28 | variable_add_weighted (variable, value, weight: 1.); |
29 | } |
30 | |
31 | double |
32 | variable_mean (Variable *variable) |
33 | { |
34 | return variable->sum / variable->weight; |
35 | } |
36 | |
37 | double |
38 | variable_standard_deviation (Variable *variable) |
39 | { |
40 | double mean = variable_mean (variable); |
41 | return sqrt (x: variable->sum2 / variable->weight - mean * mean); |
42 | } |
43 |