60 {
61#ifdef LOGGING
62 updated++;
63 const double old_value =
value;
64#endif
65 const double old_biased =
biased;
66 const double delta = y - old_biased;
67 const double scaled_delta =
alpha * delta;
68 const double new_biased = old_biased + scaled_delta;
69 LOG (
"update %" PRIu64
" of biased %s EMA %g with %g (delta %g) "
70 "yields %g (scaled delta %g)",
71 updated,
name, old_biased, y, delta, new_biased, scaled_delta);
73 const double old_exp =
exp;
74 double new_exp, div, new_value;
75 if (old_exp) {
76 new_exp = old_exp *
beta;
79 div = 1 - new_exp;
81 new_value = new_biased / div;
82 } else {
83 new_value = new_biased;
84#ifdef LOGGING
85 new_exp = 0;
86 div = 1;
87#endif
88 }
90 LOG (
"update %" PRIu64
" of corrected %s EMA %g with %g (delta %g) "
91 "yields %g (exponent %g, divisor %g)",
92 updated,
name, old_value, y, delta, new_value, new_exp, div);
93#ifndef LOGGING
94 (void) internal;
96#endif
97}