Если энкодер крутится с большой скоростью, а промежуточные данные
сохраняются как 16 битные числа, то в вашем варианте меньше
максимальная разность показаний, которую обрабатывает алгоритм
усреднения. Допустим что разность между соседними показаниями равна
D и она примерно постоянна. Тогда чтобы не произошло переполнение в
вашем алгоритме необходимо чтобы |3*D|<32768, откуда
|D|<10922. Если же использовать мой вариант то при постоянной
скорости вращения энкодера указанные разности будут иметь противоположные знаки и скомпенсируют одна другую, и условие на скорость можно заменить как минимум на |D| < 16384.