22 : intermediate_value(zero),
24 intermediate_count(0),
29 size_t intermediate_count,
33 : intermediate_value(intermediate_value),
34 intermediate_count(intermediate_count),
35 mean_value(mean_value),
36 mean_count(mean_count),
42 std::function<TYPE(FLOAT r,
const TYPE &a,
const TYPE &b)>
func_interp;
48 func_interp = [](FLOAT r,
const TYPE &a,
const TYPE &b) -> TYPE {
49 return (1 - r) * a + r * b;
54 if (intermediate_count == 0) {
55 intermediate_value = value;
56 intermediate_count = 1;
58 auto r = FLOAT(1) / FLOAT(1 + intermediate_count);
59 intermediate_value = func_interp(r, intermediate_value, value);
63 if (intermediate_count < next_accumulation_count)
66 auto r = FLOAT(intermediate_count) / FLOAT(intermediate_count + mean_count);
67 mean_value = func_interp(r, mean_value, intermediate_value);
68 intermediate_value = zero;
70 mean_count += intermediate_count;
71 intermediate_count = 0;
73 next_accumulation_count = size_t(std::sqrt(mean_count));
78 operator TYPE()
const {
79 if (!mean_count)
return intermediate_value;
80 auto r = FLOAT(intermediate_count) / FLOAT(intermediate_count + mean_count);
81 return func_interp(r, mean_value, intermediate_value);
85 TYPE intermediate_value;
86 size_t intermediate_count;
87 size_t next_accumulation_count = 1;
std::function< TYPE(FLOAT r, const TYPE &a, const TYPE &b)> func_interp
Function to estimate weighted mean, i.e.
Definition AccumulativeMean.hh:42