# Computing average in a constant time

*Also known as average streaming.*

Source: https://stackoverflow.com/a/22999488/3135248

The following function adds a number to an average. average is the current average, size is the current number of values in the average, and value is the number to add to the average:

`double addToAverage(double average, int size, double value)`

{

return (size * average + value) / (size + 1);

}

Likewise, the following function removes a number from the average:

`double subtractFromAverage(double average, int size, double value)`

{

// if (size == 1) return 0; // wrong but then adding a value "works"

// if (size == 1) return NAN; // mathematically proper

// assert(size > 1); // debug-mode check

// if(size < 2) throw(...) // always check

return (size * average - value) / (size - 1);

}