pow(x,n)

来源:互联网 发布:出差日历行程软件 编辑:程序博客网 时间:2024/06/05 05:24

注意n为负数的情况

    public double pow(double x, int n) {        int sign = n < 0 ? -1 : 1;        n = Math.abs(n);        double result = helper(x, n);        return sign == 1 ? result : (double) 1/result;    }        double helper(double x, int n) {        if (n == 0) {            return 1;        }        if (n == 1) {            return x;        }        double result = pow(x, n/2);        result *= result;        if (n%2 == 1) {            result = result*x;        }                return result;    }

一个非递归的方法: http://blog.csdn.net/linhuanmars/article/details/20092829

public double pow(double x, int n) {    if(n==0)        return 1.0;    double res = 1.0;       if(n<0)    {        if(x>=1.0/Double.MAX_VALUE||x<=1.0/Double.MIN_VALUE)            x = 1.0/x;        else            return Double.MAX_VALUE;        if(n==Integer.MIN_VALUE)        {            res *= x;            n++;        }    }    n = Math.abs(n);    boolean isNeg = false;    if(n%2==1 && x<0)    {        isNeg = true;    }    x = Math.abs(x);    while(n>0)    {        if((n&1) == 1)        {            if(res>Double.MAX_VALUE/x)                return Double.MAX_VALUE;            res *= x;        }        x *= x;        n = n>>1;    }    return isNeg?-res:res;}

0 0
原创粉丝点击