题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路
一般情况下都能够想到的代码是
double normalPower(double base,int exponent){
double result=1.0;
for(int i=1;i<=exponent;i++){
result*=base;
}
return result;
}
但是考虑边界情况是:
1. 底数为0;
2.指数为0;
3.指数为负数。
考虑了这三种情况,思路就完整了。
另外关于浮点数的比较问题:double和float不能够直接==进行比较,因为计算机舍取的精度问题。因此可以用这种方式:
doubel a 和double b,(a-b)>-EPSILON&&(a-b)<EPSOLON,查看相减的值是不是在某一个范围内。
代码实现
double Power(double base, int exponent) {
//现在要考虑的特殊情况,即base为0时怎么处理;
//特殊情况:exponent为0时怎么处理。
double result=1.0;
if(equal(base,0.0)){return 0.0;}
else if(exponent==0){return 1.0;}
else if(exponent>0){//exponent为正数
result=normalPower(base,exponent);
return result;
}else{//exponent为负数
exponent=-exponent;
result=normalPower(base,exponent);
result=1/result;
return result;
}
}
double normalPower(double base,int exponent){
double result=1.0;
for(int i=1;i<=exponent;i++){
result*=base;
}
return result;
}
bool equal(double a,double b){
if((a-b>-1e-5)&&(a-b<=1e-5)){
return true;
}else{
return false;
}
}