( locsemege | 2020. 05. 05., k – 12:31 )

A jobbra rotálást értem, mert nyilván 2^n-szeres lesz az összeg, ha egyhelyben topog a pointer, és ráhalmozol 2^n darab adatot. Tehát akkor n-szer jobbra kell shiftelni. Egyébként ezt teszem, csak kicsit másképp. Minden 2^n adat alkalmával kiveszem a ringbufferből a régi értéket, leteszem egy változóba. A bufferben így felszabadult helyre beteszem az új értéket, a frissen mértet. Léptetem a pointert, ahol a legrégebbi értéknél eggyel frisseb adat van. Ebből kivonom azt a legrégebbit, amit az imént kivettem a ringből. Ezt jobbra shiftelem n-szer, így meglesz a növekményem, s minden alkalommal ezt a növekményt hozzáadom a kivett legrégebbi értékhez, azaz lineárisan interpolálok.

A jobbra shifteléssel nem veszítek pontosságot, mert lefelé kiterjesztem az aritmetikámat byte-okkal, azok a bitek nem vésznek el, így nem megy a pontosság rovására. Ha úgy tetszik, fixpontos tört aritmetikát használok, ha beleképzeljük a kettedespontot. Vagy más szavakkal azt is mondhatnám, hogy a számaimnak a 65536-szorosával dolgozok mindvégig. Értelmezés kérdése.

Amúgy, ha jól értem, a te javaslatod is lényegében ilyesmi volt.