数值的正数次方

代码

/*
实现函数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));
    }    
}