В вопросе «Какой численно лучший способ рассчитать среднее?» было предложено , что вычисление скользящего среднего, т.е.
mean = a[n]/n + (n-1)/n * mean
может быть численно более стабильным, чем вычисление суммы с последующим делением на общее количество элементов. Это было задано под сомнение комментатором. Я не могу сказать, какая из них правда - может кто-то другой? Преимущество скользящего среднего состоит в том, что вы сохраняете среднее значение маленьким (т.е. примерно того же размера, что и все векторные записи). Интуитивно это должно уменьшить ошибку. Но комментатор утверждает:
Частично проблема заключается в том, что 1 / n вносит ошибки в наименее значимые биты, поэтому n / n! = 1, по крайней мере, когда это выполняется как трехэтапная операция. (делить-хранить-умножать). Это сводится к минимуму, если деление выполняется только один раз, но вы делаете это для ГБ данных.
Итак, у меня несколько вопросов:
- Является ли скользящее среднее более точным, чем суммирование и последующее деление?
- Зависит ли это от вопроса, вычисляется ли сначала 1 / n, а затем умножается?
- Если да, то реализуют ли компьютеры одностадийное деление? (Я так и думал, но сейчас не уверен)
- Если да, то это более точно, чем суммирование Кахана с последующим делением?
- Если можно сравнить - какой из них быстрее ? В обоих случаях у нас есть дополнительные вычисления.
- Если точнее, можете ли вы использовать это для точного суммирования?