1 #ifndef CONTAINERMATH_H 2 #define CONTAINERMATH_H 23 template <
class Iterator >
24 double mean(Iterator first, Iterator last) {
25 size_t distance = std::distance(first, last);
26 double sum = std::accumulate(first, last, *first-*first);
40 template <
class Iterator >
41 double mean(Iterator first, Iterator last,
typename Iterator::value_type ignoreValue) {
43 size_t distance = std::distance(first, last);
46 double sum = std::accumulate(first, last, *first-*first);
49 size_t ignoreValuesOccur = std::count(first, last, ignoreValue);
52 sum -= ignoreValuesOccur*ignoreValue;
55 size_t newCount = distance - ignoreValuesOccur;
61 template <
typename T >
62 struct quadraticdifference_accumulator{
66 quadraticdifference_accumulator(T m) :
67 mean(m), allVals(
true) {};
68 quadraticdifference_accumulator(T m, T ignore) :
69 mean(m), ignoredValue(ignore), allVals(
false) {};
71 T operator()(T initial, T following) {
73 if (allVals || following!=ignoredValue)
74 val = pow(mean-following, 2) + initial;
88 template <
class Iterator >
89 double stddev(Iterator first, Iterator last) {
90 quadraticdifference_accumulator<double> qDiff (
mean(first, last));
92 const auto elementsCount = std::distance(first, last);
93 const double sum = std::accumulate(first, last, initVal, qDiff);
95 return pow(sum/elementsCount, 0.5);
108 template <
class Iterator >
109 double stddev(Iterator first, Iterator last,
typename Iterator::value_type ignoreValue) {
110 quadraticdifference_accumulator<double> qDiff (
mean(first, last, ignoreValue), ignoreValue);
112 const auto elementsCount = std::distance(first, last) - std::count(first, last, ignoreValue);
113 const double sum = std::accumulate(first, last, initVal, qDiff);
115 return pow(sum/elementsCount, 0.5);
Definition: ContainerMath.h:11
double mean(Iterator first, Iterator last)
Metafunction computing the mean value. This function calculates the mean value of elements in given c...
Definition: ContainerMath.h:24
double stddev(Iterator first, Iterator last)
Metafunction computing the standard deviation value. This function calculates the standard deviation ...
Definition: ContainerMath.h:89