数值的整次方
实现函数double(double base,int exponent),求base的exponent次方
要点:
- 使用exponent>>1来代替exponent/2
- 使用exponent&1来判断奇偶
- 参数合规性判断
public class Offer21 {
public static double power(double base,int exponent){
double result = 0;
if(exponent>0){
result = powerCore(base,exponent);
}else if(exponent<0){
if(base<0)return 0;
result = 1/powerCore(base,-exponent);
}else {
return 1;
}
return result;
}
//第一种
public static double powerCore(double base,int exponent){
if(exponent==1)return base;
if(exponent==0)return 1;
double result = power(base,exponent>>1);
result*=result;
//判断奇偶
if((exponent&1)==1)result*=base;
return result;
}
public static double power2(double base,int exponent){
if(base==0)return 0;
if(exponent==1)return base;
double result ;
if(exponent>0){
result = powerCore2(base,exponent);
}else if(exponent<0){
result = 1/powerCore2(base,-exponent);
}else {
return 1;
}
return result;
}
//第二种
public static double powerCore2(double base,int exponent){
double result=base;
int temp = exponent;
while (true){
result*=result;
temp=temp>>1;
if(temp==1)break;
}
if((exponent&1)==1)result*=base;
return result;
}
}