I need to operate on 64bit integers. I am trying to get the result of 36 raised to the power of 12 as an exercise (and as a requirement).
I've used unsigned long long for 64 bit integer on my VS2008 compiler. I've made the code below and can someone explain to me, why my for loop version produces incorrect results while my recursive version of the Power function produces correct result?
FYI: 36 raised to 12 is 4738381338321616896
template< typename _T1, typename _T2 >
_T1 Power( _T1 p_base, _T2 p_power )
{
/*
// This produces 0?!!
if( p_power == 0 ) return 1;
for( _T2 i = 1; i < p_power; ++i )
{
p_base *= p_base;
}
return p_base;
*/
// This produces correct result.
if( p_power == 0 ) return 1;
if( p_power == 1 ) return p_base;
return p_base * Power( p_base, p_power - 1 );
}
void main( int argc, char * argv[] )
{
unsigned long long charsetSize = 36LL;
printf( "Maximum Keys: %llu\n\n", Power( charsetSize, 12 ) );
system( "pause" );
}