26 #ifndef MLN_ACCU_STAT_DEVIATION_HH
27 # define MLN_ACCU_STAT_DEVIATION_HH
33 # include <mln/accu/internal/base.hh>
34 # include <mln/accu/math/count.hh>
35 # include <mln/accu/math/sum.hh>
36 # include <mln/math/sqr.hh>
37 # include <mln/math/sqrt.hh>
60 typename S = mln_sum(T),
62 struct deviation :
public mln::accu::internal::base< M , deviation<T,S,M> >
72 void take(
const argument& t);
97 template <
typename I,
typename S,
typename M>
107 template <
typename T,
108 typename S = mln_sum(T),
119 # ifndef MLN_INCLUDE_ONLY
121 template <
typename T,
typename S,
typename M>
129 template <
typename T,
typename S,
typename M>
138 template <
typename T,
typename S,
typename M>
143 sum_.take(mln::math::sqr(t - mean_));
146 template <
typename T,
typename S,
typename M>
149 deviation<T,S,M>::take(
const deviation<T,S,M>& other)
152 count_.take(other.count_);
153 sum_.take(other.sum_);
156 template <
typename T,
typename S,
typename M>
161 unsigned n = count_.to_result();
164 return static_cast<M
>(mln::math::sqrt(sum_.to_result() / n));
167 template <
typename T,
typename S,
typename M>
174 template <
typename T,
typename S,
typename M>
179 return count_.to_result() != 0;
182 # endif // ! MLN_INCLUDE_ONLY
191 #endif // ! MLN_ACCU_STAT_DEVIATION_HH