31#ifndef ETL_CUMULATIVE_MOVING_AVERAGE_INCLUDED
32#define ETL_CUMULATIVE_MOVING_AVERAGE_INCLUDED
39 namespace private_pseudo_moving_average
45 template <
typename TCMA>
94 const size_t SAMPLE_SIZE,
95 const size_t SCALING = 1U,
107 template <
typename T, const
size_t SAMPLE_SIZE_, const
size_t SCALING_>
117 static ETL_CONSTANT sample_t SAMPLES =
static_cast<sample_t
>(SAMPLE_SIZE_);
118 static ETL_CONSTANT scale_t SCALE =
static_cast<scale_t
>(SCALING_);
122 typedef T value_type;
125 static ETL_CONSTANT
size_t SAMPLE_SIZE = SAMPLE_SIZE_;
126 static ETL_CONSTANT
size_t SCALING = SCALING_;
133 : average(initial_value * SCALE)
143 average = (initial_value * SCALE);
153 average += SCALE * new_value;
154 average /= SAMPLES + sample_t(1);
180 template <
typename T, const
size_t SAMPLE_SIZE_, const
size_t SCALING_>
183 template <
typename T, const
size_t SAMPLE_SIZE_, const
size_t SCALING_>
192 template <
typename T, const
size_t SCALING_>
200 static ETL_CONSTANT scale_t SCALE =
static_cast<scale_t
>(SCALING_);
204 typedef T value_type;
207 static ETL_CONSTANT
size_t SCALING = SCALING_;
214 : average(initial_value * SCALE)
215 , samples(sample_t(sample_size))
225 average = (initial_value * SCALE);
234 samples = sample_t(sample_size);
244 average += SCALE * new_value;
245 average /= samples + sample_t(1);
272 template <
typename T, const
size_t SCALING_>
281 template <
typename T, const
size_t SAMPLE_SIZE_>
288 typedef T value_type;
291 static ETL_CONSTANT
size_t SAMPLE_SIZE = SAMPLE_SIZE_;
298 : reciprocal_samples_plus_1(T(1.0) / T(SAMPLE_SIZE_ + 1U))
299 , average(initial_value)
309 average = initial_value;
316 void add(
const T new_value)
318 average += (new_value - average) * reciprocal_samples_plus_1;
341 const T reciprocal_samples_plus_1;
345 template <
typename T, const
size_t SAMPLE_SIZE_>
346 ETL_CONSTANT
size_t pseudo_moving_average<T, SAMPLE_SIZE_, 1U, false, true>::SAMPLE_SIZE;
353 template <
typename T>
360 typedef T value_type;
368 : reciprocal_samples_plus_1(T(1.0) / T(sample_size + 1U))
369 , average(initial_value)
379 average = initial_value;
388 reciprocal_samples_plus_1 = T(1.0) / (T(sample_size) + T(1));
395 void add(
const T new_value)
397 average += (new_value - average) * reciprocal_samples_plus_1;
420 T reciprocal_samples_plus_1;
Definition: pseudo_moving_average.h:47
Definition: pseudo_moving_average.h:194
pseudo_moving_average(const T initial_value, const size_t sample_size)
Definition: pseudo_moving_average.h:213
void clear(const T initial_value)
Definition: pseudo_moving_average.h:223
void add(T new_value)
Definition: pseudo_moving_average.h:241
T value() const
Definition: pseudo_moving_average.h:252
void set_sample_size(const size_t sample_size)
Definition: pseudo_moving_average.h:232
add_insert_iterator input()
Definition: pseudo_moving_average.h:261
static ETL_CONSTANT size_t SCALING
The sample scaling factor.
Definition: pseudo_moving_average.h:207
Definition: pseudo_moving_average.h:355
add_insert_iterator input()
Definition: pseudo_moving_average.h:413
void set_sample_size(const size_t sample_size)
Definition: pseudo_moving_average.h:386
pseudo_moving_average(const T initial_value, const size_t sample_size)
Definition: pseudo_moving_average.h:367
T value() const
Definition: pseudo_moving_average.h:404
void add(const T new_value)
Definition: pseudo_moving_average.h:395
void clear(const T initial_value)
Definition: pseudo_moving_average.h:377
Definition: pseudo_moving_average.h:283
void clear(const T initial_value)
Definition: pseudo_moving_average.h:307
T value() const
Definition: pseudo_moving_average.h:325
add_insert_iterator input()
Definition: pseudo_moving_average.h:334
void add(const T new_value)
Definition: pseudo_moving_average.h:316
pseudo_moving_average(const T initial_value)
Definition: pseudo_moving_average.h:297
Definition: pseudo_moving_average.h:109
void add(T new_value)
Definition: pseudo_moving_average.h:150
pseudo_moving_average(const T initial_value)
Definition: pseudo_moving_average.h:132
T value() const
Definition: pseudo_moving_average.h:161
static ETL_CONSTANT size_t SAMPLE_SIZE
The number of samples averaged over.
Definition: pseudo_moving_average.h:125
void clear(const T initial_value)
Definition: pseudo_moving_average.h:141
add_insert_iterator input()
Definition: pseudo_moving_average.h:170
static ETL_CONSTANT size_t SCALING
The sample scaling factor.
Definition: pseudo_moving_average.h:126
Definition: pseudo_moving_average.h:98
conditional
Definition: type_traits_generator.h:1160
is_floating_point
Definition: type_traits_generator.h:1031
is_integral
Definition: type_traits_generator.h:1001
bitset_ext
Definition: absolute.h:38
iterator
Definition: iterator.h:399