首先,我们分析下可能出现的情况:指数可能为负值,我们先求指数的绝对值次方,然后求导。->求导,那就要考虑分母不为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;}新闻热点
疑难解答