On Mon, Jun 28, 2004 at 12:23:37 +0200, Maarten de Boer wrote: > Hi Erik, > > Depending on the ranges of your increment, and the accuracy you > want to obtain, you might consider doing this with integers only.
Yes, for this kind of accumulator thing I often use a hacked up fixedpoint representation: typedef union { int32_t all; struct { uint16_t fr; int16_t in; } part; } fixp16; as you're only ever adding to them, you dont gain much by using floats, getting the interger part out is really cheap and easy (foo.part.in) and the fractional part is foo.part.fr / 2^16. Accumulation is done with accum.all += delta.all. The 32.32 form should be obvious. I think the struct components need to be the other way round for bigendian machines though. I really must do something about making that work... - Steve