<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Also, I would write the code like this:<br><br>        pixman_fixed_t error = pixman_fixed_1 - new_total;<span class=""><br>        for (x = 0; x < width; ++x)<br></span>        {<br>            pixman_fixed_t d = error * (x + 1) / width;<br>            p[x] += d;<br>            error -= d;<br>        }<br><br></div><div>to get rid of the temporary and to make it more obvious that there is an error that is being distributed.<br></div></div></div></div></blockquote><div><br></div><div>I meant <br><br>    ...<br></div><div>    pixman_fixed_t d = error / (width - x);<br>    ...<br><br></div><div>of course, but I guess the rounding-towards-zero behavior of division in C makes this less desirable since it tends to put all the rounding error towards one side of the kernel. Rounding-to-nearest would make it similar to your code:<br><br>    ...<br></div><div>    pixman_fixed_t d = DIV(error + (width - x - 1) / 2, width - x)<br></div><div>    ...<br><br></div><div>but then it would be slightly cleaner to make the loop count down:<br><br></div><div>    for (x = width; x > 0; --x)<br>    {<br></div><div>        pixman_fixed_t d = DIV(error + (x - 1) / 2, x)<br></div><div>        p[x] += d;<br></div><div>        error -= d;<br>    }<br></div><br><br></div><div class="gmail_quote">Søren<br></div></div></div>