
代码
/*
实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题
*/
public class My {
static class Power {
public double power(double base,int exponent) throws Exception{
double result = 0.0;
//底数为0且是负幂
if(equal(base,0.0) && exponent<0){
throw new Exception("0的负数次幂无意义");
}
if(equal(exponent,0)){
return 1.0;
}
if(exponent <0){
result= powerWithExponent(1.0/base, -exponent);
}
else{
result = powerWithExponent(base,exponent);
}
return result;
}
private double powerWithExponent2(double base,int exponent){
double result = 1.0;
for(int i = 1;i<= exponent;i++){
result = result*base;
}
return result;
}
//优化
private double powerWithExponent(double base,int exponent){
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double result = powerWithExponent2(base,exponent >>1);
result *= result;
//指数幂是奇数
if((exponent&0x1) == 1)
result *=base;
return result;
}
//判断两个double型数据,计算机有误差
private boolean equal(double num1,double num2){
if((num1-num2>-0.0000001) && (num1-num2<0.0000001)){
return true;
}else{
return false;
}
}
}
public static void main(String[] args) throws Exception{
System.out.println((new Power()).power(3, -1));
}
}
近期评论