Listing 1: The Unrolled Logarithmic Power Algorithm

template<int exp, typename T>

inline T UnrolledPower(const T& base)

{

if( 0 == exp )

return 1;

else if( exp % 2 )

return UnrolledPower<(exp > 0) ? (exp - 1) : 0>(

base

) * base;

else

return UnrolledPower<exp/2>(base * base);

}