要注意的几个地方:1.如何判断两个double类型的数据是否相等。2.需要进行Power有效性的判断,0的负指数次方没有意义。3.在进行power运算的时候要考虑效率。
#include<iostream>
using namespace std;
bool isValid = true;
bool isPositive = true;
bool doubleEqual(double number1, double number2) {
if(number1 - number2 < 0.0000001 && number1 - number2 > -0.0000001) {
return true;
} else {
return false;
}
}
double PowerWithPositiveExponent(double base, unsigned int exponent) {
if(exponent == 1) {
return base;
}
if(exponent == 0) {
return 1;
}
if(exponent & 0x01) {
return PowerWithPositiveExponent(base, exponent >> 1) * PowerWithPositiveExponent(base, exponent >> 1) * base;
} else {
return PowerWithPositiveExponent(base, exponent >> 1) * PowerWithPositiveExponent(base, exponent >> 1);
}
}
double Power(double base, int exponent) {
isValid = true;
isPositive = true;
if(doubleEqual(base, 0.0) && exponent < 0) {
isValid = false;
cout<<"this is invalid option. ";
return 0;
}
if(exponent < 0) {
isPositive = false;
exponent = 0 - exponent;
}
double result = PowerWithPositiveExponent(base, (unsigned int)exponent);
if(!isPositive) {
result = 1.0 / result;
}
return result;
}
int main() {
cout<<"Power(3.0, 2) = "<<Power(3.0, 2)<<endl;
cout<<"Power(3.0, -2) = "<<Power(3.0, -2)<<endl;
cout<<"Power(0.0, -2) = "<<Power(0.0, -2)<<endl;
cout<<"Power(0.1, -2) = "<<Power(0.1, -2)<<endl;
cout<<"Power(0.1, 2) = "<<Power(0.1, 2)<<endl;
cout<<"Power(2.0, 33) = "<<Power(2.0, 32)<<endl;
cout<<"Power(2.0, 64) = "<<Power(2.0, 64)<<endl;
return 1;
}