Я всегда использую следующий псевдокод:
float mean=0.0; // could use doulbe
int n=0; // could use long
for each x in data:
++n;
mean+=(x-mean)/n;
У меня нет формальных доказательств его стабильности, но вы можете видеть, что у нас не будет проблем с числовым переполнением, если предположить, что значения данныххорошо себя ведетЭто упоминается в Кнуте Искусство компьютерного программирования