Repeating alpha over/under operation multiple times
So taking source over as an example, the math works out to:


  dst = a * src + (1 - a) * dst


Taking Nathan Reed's suggestion of replacing (1 - a) with b, that gives us:


  dst = a * src + b * dst


If we perform the next iteration, it becomes:


  dst = a * src + ab * src + b^2 * dst


Doing it again, we get:


  dst = a * src + ab * src + ab^2 * src + b^3 * dst


And then:


  dst = a * src + ab * src + ab^2 * src + ab^3 * src + b^4 * dst


The pattern appears to be:

int exponent;
for (exponent = 0; exponent &lt; numIterations; exponent++)
{
    newDst += a * pow(b, exponent) * src;
}
newDst += pow(b, exponent) * dst;