Поскольку вы делите на степень 2 и ваши числа не являются сверхмалыми, этот шаг не должен влиять на точность результата. Вы просто вычитаете 14 из показателя степени.
Подсчитано количество бит в ваших выборках.
Поплавки дают вам 24 бита точности. Если у вас есть 2 ^ 14 = 16384 семплов, то, когда вы сложите их все, вы будете постепенно терять точность до тех пор, пока в какой-то момент ничего не произойдет после потери 24-14 = 10-го бита. Другими словами: на данный момент вы сохраняете только около 3 десятичных цифр.
Можно ли использовать int в качестве аккумулятора или даже uint? Таким образом, вы сохраните 8 дополнительных битов, в два раза больше, чем разница между 1024 и 16384 сэмплами.
Есть второй, совершенно другой вариант. Я не знаю, каков диапазон ваших образцов, но если они примерно одинакового размера, вы можете вычесть приблизительное среднее значение из каждого значения, усреднить различия и добавить приблизительное среднее значение в конце.
То, сколько вы получите этим методом, зависит от того, насколько хороша ваша первоначальная аппроксимация среднего и насколько близки значения к среднему. Так что я бы сказал, что, вероятно, он менее надежен в вашей ситуации.