[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [sc-dev] [APPROVE] Adding a RunningAverage UGen
> > //update sum
> > sum -=data[count];
> > float next= ZXP(in);
> > next *= next;
> > data[count]= next;
> > sum += next;
This is not stable for floating point variables. Rounding errors can
accumulate in sum.
This was discussed in a thread on music-dsp last November under the topic
"floating point running sum optimization".
The best solution I could come up with was recalculate the sum every N
samples using an amortized algorithm something like the following:
sum -=data[count];
float next= ZXP(in);
data[count]= next;
sum += next;
sum2 += next;
++count;
if( count == N ){
count = 0;
sum = sum2;
sum2 = 0;
}
have fun hoisting the conditional out of the inner loop for arbitrary N :-)
Ross.