On Fri, 1 Oct 1999, Harold M Hallikainen wrote: > > What I did in this situation was to divide by 256 (throw away the > lower 8 bits) AND, if the MSB of the second operand was set, I > incremented the result. This seemed to work pretty well. An obvious > error of one bit appears at the low end (using 0x00 and 0xff results in > 0x01)... Maybe I'll mess with it a bit more... Anyone see a quick and > dirty way to divide a 16 bit number by 255? Yeah, do the 8X8 multiplication. Add the upper byte to the lower byte and then throw away the lower byte. If you want to round the result up, then add 0x80 to the lower byte befor throwing it away: A, B, Yh:Yl Want A*B/255: Yh:Yl = A*B Yh:Yl = Yh:Yl + Yh + 0x80 Yh contains the result. Maybe my post on this subject the last time didn't make it (I did get a bounce notification from it). I hate to repeat it, but here's the essential part: C = A*B/255 There is another trick that you can attempt. Recall the power series for division: N N / / e \ / e \2 / e \3 \ ------- = --- * | 1 - |---| + |---| - |---| + ... | v + e v \ \ v / \ v / \ v / / In Harold's equation, N=A*B, v+e = 255. If you let v=256 and e=-1 then the series simplifies to: A*B A*B / / 1 \ / 1 \2 / 1 \3 \ -------- = --- * | 1 + |---| + |---| + |---| + ... | 256 - 1 256 \ \256/ \256/ \256/ / Or just keeping the first two terms: A*B A*B / 1 \ -------- ~= --- * | 1 + --- | 255 256 \ 256 /