# VarianceAccumulator class

`VarianceAccumulator`

computes mean and standard deviation by accumulating the first two
central moments.

Samples are added one by one, using the `Push`

method. Other members are used to retrieve estimates of
the population statistics based on the samples seen up to that point. Formula used to compute population
statistics are corrected, though the standard deviation is not an unbiased estimator. The accumulator
uses a stable algorithm to prevent catastrophic cancellation. If catastrophic cancellation is unlikely
or not important, use the faster `dip::FastVarianceAccumulator`

.

It is possible to accumulate samples in different objects (e.g. when processing with multiple threads),
and add the accumulators together using the `+`

operator.

It is also possible to remove a sample from the accumulator, using the `Pop`

method. It is assumed that the
particular value passed to this method had been added previously to the accumulator. If this is not the case,
resulting means and variances are no longer correct.

## Functions

- void Reset()
- Reset the accumulator, leaving it as if newly allocated.
- void Push(dip::dfloat x)
- Add a sample to the accumulator
- void Pop(dip::dfloat x)
- Remove a sample from the accumulator
- auto Number() const -> dip::uint
- Number of samples
- auto Mean() const -> dip::dfloat
- Unbiased estimator of population mean
- auto Variance() const -> dip::dfloat
- Unbiased estimator of population variance
- auto StandardDeviation() const -> dip::dfloat
- Estimator of population standard deviation (it is not possible to derive an unbiased estimator)

## Operators

- auto operator+=(dip::VarianceAccumulator const& b) -> dip::VarianceAccumulator&
- Combine two accumulators