Keeping a running average

I needed to average a lot of large values and was afraid that the normal approach of a+b+c..etc/N would overflow or something.

So here’s a C++ class to keep a running average:

class InfiniteRunningAverage
{
	double average;
	double valueCount;

public:
	InfiniteRunningAverage()
	{
		average = 0.0;
		valueCount = 1;
	}

	void Add(double value)
	{
		average = average * ((valueCount-1.0)/valueCount) + value * (1.0/valueCount);

		valueCount += 1.0;
	}

	double Get()
	{
		return average;
	}
};

Hmm. I guess eventually valueCount will get so big that new values will have no effect. So it can’t really be considered an infinite running average.

One Comment

  1. Rob says:

    Thanks – helped a lot :)

Leave a Reply