...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::accumulators::impl::variance_impl — Iterative calculation of variance.
// In header: <boost/accumulators/statistics/variance.hpp> template<typename Sample, typename MeanFeature, typename Tag> struct variance_impl : public accumulator_base { // types typedef numeric::functional::fdiv< Sample, std::size_t >::result_type result_type; // construct/copy/destruct template<typename Args> variance_impl(Args const &); // public member functions template<typename Args> void operator()(Args const &); result_type result(dont_care) const; template<typename Archive> void serialize(Archive &, const unsigned int); };
Iterative calculation of sample variance according to the formula
where
is the estimate of the sample mean and is the number of samples.
Note that the sample variance is not defined for .
A simplification can be obtained by the approximate recursion
because the difference
converges to zero as . However, for small the difference can be non-negligible.