首先,我们分析下可能出现的情况:指数可能为负值,我们先求指数的绝对值次方,然后求导。->求导,那就要考虑分母不为0的情况了。
bool g_InvalidInput = false;
double Power(double base, int exponent)
{
g_InvalidInput = false;
if (equal(base, 0.0) && exponent < 0)
{
g_InvalidInput = true;
return 0.0;
}
unsigned int absExponent = (unsigned int)(exponent);
if (exponent < 0)
{
absExponent = (unsigned int)(-exponent);
}
double result = PowerWithUnsignedExponent(base, absExponent);
if (exponent < 0)
{
result = 1.0 / result;
}
return result;
}
double PowerWithUnsignedExponent(double base, unsigned absExponent)
{
double result = 1.0;
for (int i = 0; i < absExponent; ++i)
{
result *= base;
}
return result;
}
bool equal(double num1, double num2)
{
if ((num1-num2<0.000001) && (num1-num2>-0.000001))
{
return true;
}
return false;
}
第二种方法:
a^n
当n为偶数时,a^n=a^(n/2);
当n为奇数时,a^n=a^((n-1)/2)*a^((n-1)/2)*a;
double PowerWithUnsignedExponent(double base, unsigned absExponent)
{
if (absExponent == 0)
{
return 1;
}
if (absExponent == 1)
{
return base;
}
double result = PowerWithUnsignedExponent(base, absExponent >> 1);
result *= result;
if (absExponent & 0x1)
{
result *= base;
}
return result;
}