26 #ifndef MLN_ACCU_STAT_VARIANCE_HH
27 # define MLN_ACCU_STAT_VARIANCE_HH
34 # include <mln/accu/internal/base.hh>
35 # include <mln/util/pix.hh>
59 typename S = mln_sum(T),
61 struct variance :
public mln::accu::internal::base< R , variance<T,S,R> >
71 void take_as_init(
const argument& t);
72 void take(
const argument& t);
75 void take(
unsigned n_times,
const argument& t);
108 template <
typename I,
typename S,
typename R>
109 struct variance< util::pix<I>, S,R >;
113 # ifndef MLN_INCLUDE_ONLY
115 template <typename T, typename S, typename R>
122 template <
typename T,
typename S,
typename R>
131 template <
typename T,
typename S,
typename R>
141 template <
typename T,
typename S,
typename R>
144 variance<T,S,R>::take(
unsigned n_times,
const argument& t)
150 sum2_ += n_times * t * t;
153 template <
typename T,
typename S,
typename R>
156 variance<T,S,R>::take_as_init(
const argument& t)
163 template <
typename T,
typename S,
typename R>
166 variance<T,S,R>::take(
const variance<T,S,R>& other)
170 sum2_ += other.sum2_;
173 template <
typename T,
typename S,
typename R>
181 return sum2_ / n_ - m_ * m_;
184 template <
typename T,
typename S,
typename R>
194 template <
typename T,
typename S,
typename R>
202 template <
typename T,
typename S,
typename R>
210 template <
typename T,
typename S,
typename R>
218 template <
typename T,
typename S,
typename R>
223 return std::sqrt(to_result());
226 template <
typename T,
typename S,
typename R>
234 # endif // ! MLN_INCLUDE_ONLY
243 #endif // ! MLN_ACCU_STAT_VARIANCE_HH