-
Notifications
You must be signed in to change notification settings - Fork 32
/
rrd_hw_math.h
132 lines (104 loc) · 3.32 KB
/
rrd_hw_math.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*****************************************************************************
* rrd_hw_math.h Math functions for Holt-Winters computations
*****************************************************************************/
#include "rrd.h"
#include "rrd_format.h"
/* since /usr/include/bits/mathcalls.h:265 defines gamma already */
#define gamma hw_gamma
/*****************************************************************************
* Functions for additive Holt-Winters
*****************************************************************************/
rrd_value_t hw_additive_calculate_prediction(
rrd_value_t intercept,
rrd_value_t slope,
int null_count,
rrd_value_t seasonal_coef);
rrd_value_t hw_additive_calculate_intercept(
rrd_value_t alpha,
rrd_value_t scratch,
rrd_value_t seasonal_coef,
unival *coefs);
rrd_value_t hw_additive_calculate_seasonality(
rrd_value_t gamma,
rrd_value_t scratch,
rrd_value_t intercept,
rrd_value_t seasonal_coef);
rrd_value_t hw_additive_init_seasonality(
rrd_value_t seasonal_coef,
rrd_value_t intercept);
/*****************************************************************************
* Functions for multiplicative Holt-Winters
*****************************************************************************/
rrd_value_t hw_multiplicative_calculate_prediction(
rrd_value_t intercept,
rrd_value_t slope,
int null_count,
rrd_value_t seasonal_coef);
rrd_value_t hw_multiplicative_calculate_intercept(
rrd_value_t alpha,
rrd_value_t scratch,
rrd_value_t seasonal_coef,
unival *coefs);
rrd_value_t hw_multiplicative_calculate_seasonality(
rrd_value_t gamma,
rrd_value_t scratch,
rrd_value_t intercept,
rrd_value_t seasonal_coef);
rrd_value_t hw_multiplicative_init_seasonality(
rrd_value_t seasonal_coef,
rrd_value_t intercept);
/*****************************************************************************
* Math functions common to additive and multiplicative Holt-Winters
*****************************************************************************/
rrd_value_t hw_calculate_slope(
rrd_value_t beta,
unival *coefs);
rrd_value_t hw_calculate_seasonal_deviation(
rrd_value_t gamma,
rrd_value_t prediction,
rrd_value_t observed,
rrd_value_t last);
rrd_value_t hw_init_seasonal_deviation(
rrd_value_t prediction,
rrd_value_t observed);
/* Function container */
typedef struct hw_functions_t {
rrd_value_t (
*predict) (
rrd_value_t intercept,
rrd_value_t slope,
int null_count,
rrd_value_t seasonal_coef);
rrd_value_t (
*intercept) (
rrd_value_t alpha,
rrd_value_t observed,
rrd_value_t seasonal_coef,
unival *coefs);
rrd_value_t (
*slope) (
rrd_value_t beta,
unival *coefs);
rrd_value_t (
*seasonality) (
rrd_value_t gamma,
rrd_value_t observed,
rrd_value_t intercept,
rrd_value_t seasonal_coef);
rrd_value_t (
*init_seasonality) (
rrd_value_t seasonal_coef,
rrd_value_t intercept);
rrd_value_t (
*seasonal_deviation) (
rrd_value_t gamma,
rrd_value_t prediction,
rrd_value_t observed,
rrd_value_t last);
rrd_value_t (
*init_seasonal_deviation) (
rrd_value_t prediction,
rrd_value_t observed);
rrd_value_t identity;
} hw_functions_t;
#undef gamma