不使用Math.power(double a ,double b) 做冪運算

不使用Math.power(double a ,double b) 做冪運算

/**
 * 不用Math.power(double a ,double b) 做 冪運算
 */
public class Demo_16 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double base = sc.nextDouble();
        int componet = sc.nextInt();
        double res = new Demo_16().pow(base,componet);
        System.out.println(res);
    }

    /**
     *  a ^ n = a ^ (n/2)  * a^ (n/2) , n=偶
     *  a ^ n = a ^ (n/2)  * a^ (n/2) * a, n=奇
     * @param base
     * @param componet
     * @return
     */
    private static double pow(double base, int componet) {
        if (componet < 0) return (1/ pow(base,Math.abs(componet)));//若冪值小於0則 2^(-3) = 1 / 2^3
        if (componet == 0) return 1;
        if (componet == 1) return base;
        double res = pow(base,componet >> 1);
        res *= res;//偶數次冪,則無需再 * base
        if ( (componet & 0x1) == 1) return res *= base;//與運算判斷奇數,奇數次冪
        return res;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章