Saturday, June 25, 2011

Java Code: Running Average

Following is Java code for calculating a running average and variance. This is useful if the sum of all elements causes overflow, or if a "live" calculation is required.

private double computeVariance(int[] stream) {
double mean = computeAverage(stream);
double rvar = Math.pow(stream[0] - mean, 2);
double total = 1;
double fract = 1;
double sqdif = 0;
for (int i = 1; i < stream.length; i++) {
sqdif = Math.pow(stream[i] - mean, 2);
fract = total / ++total;
rvar = (rvar * fract) + (sqdif / total);
}
return rvar;
}

private double computeAverage(int[] stream) {
double rmean = stream[0];
double total = 1;
double fract = 1;
for (int i = 1; i < stream.length; i++) {
fract = total / ++total;
rmean = (rmean * fract) + (stream[i] / total);
}
return rmean;
}

No comments:

Post a Comment