nightingale/vendor/github.com/open-falcon/rrdlite/rrd_hw_math.h

133 lines
3.3 KiB
C
Raw Normal View History

2020-03-11 18:25:20 +08:00
/*****************************************************************************
* 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