before i present my and other approaches to RTCG, here's an example:
in graphics the power
function is a good candidate for RTCG
because when shading a surface power
is called with a different
base per pixel, but the exponent remains constant as it depends only
the the surface properties.
double power(double base, int exp) { int t, bit = 1; int square = base; double result = 1.0;while (bit <= exp) { if (bit & exp) result *= square; bit = bit << 1; square *= square; } return result; }
the simplest implementation:
exponent = surface(); for (i = 0; i < bign; i++) ans[i] = power(exponent, base[i]);can then be replaced with:
exponent = surface(); p_e = power_gen(exponent); for (i = 0; i < bign; i++) ans[i] = p_e(base[i]);where
power_gen
is a generating extionsion---it does the RTCG.
the constant (static) computation has been factored out of the loop,
leaving only the dynamic computation. the control flow is done once,
leaving only a block of multiplications in the loop.