27 {
28#ifdef LOGGING
31#endif
35 const double delta = y - old_biased;
36 const double scaled_delta = alpha * delta;
37 const double new_biased = old_biased + scaled_delta;
38 LOG (
"update %" PRIu64
" of biased %s EMA %g with %g (delta %g) "
39 "yields %g (scaled delta %g)",
40 smooth->updated,
smooth->name, old_biased, y, delta, new_biased,
41 scaled_delta);
44 double new_exp, div, new_value;
45 if (old_exp) {
46 new_exp = old_exp * beta;
48 if (new_exp == old_exp) {
49 new_exp = 0;
50 new_value = new_biased;
51#ifdef LOGGING
52 div = 1;
53#endif
54 } else {
55 div = 1 - new_exp;
57 new_value = new_biased / div;
58 }
60 } else {
61 new_value = new_biased;
62#ifdef LOGGING
63 new_exp = 0;
64 div = 1;
65#endif
66 }
68 LOG (
"update %" PRIu64
" of corrected %s EMA %g "
69 "with %g (delta %g) yields %g (exponent %g, div %g)",
70 smooth->updated,
smooth->name, old_value, y, delta, new_value,
71 new_exp, div);
72#ifndef LOGGING
74#endif
75}