#define MIN 0.000001
double Power_unsigned(double base, unsigned int exponent)
{
int i;
double result = 1.0;
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
result = Power_unsigned(base, exponent >> 1);
result *= result;
if (exponent & 0x1)
result *= base;
return result;
}
double Power(double base, int exponent ) {
double result = 1.0;
if (base<MIN && base>-MIN && exponent < 0)
return 0.0;
unsigned int absE = (unsigned int)(exponent);
if (exponent<0)
absE = (unsigned int)(-exponent);
result = Power_unsigned(base, absE);
if (exponent < 0)
result = 1.0 / result;
return result;
}