编辑代码


// Solution: https://blog.csdn.net/ustcer_93lk/article/details/80369990
// 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
// 保证base和exponent不同时为0

function Power(base, exponent) {
    // write code here

    // 特殊情况
    // base = 0.0:   result := 0
    // base = 1.0:   result := 1
    // exponent = 0: result := 1
    // exponent = 1: result := base
    // exponent < 0: result := 1 / Power(base, -exponent)

    if(numEquals(base, 0.0)) {
        return 0;
    }
    if(numEquals(base, 1.0)) {
        return 1;
    }
    if(exponent === 0) {
        return 1;
    }
    if(exponent === 1) {
        return base;
    }
    if(exponent < 0) {
        return 1 / Power(base, -exponent);
    }
    if(exponent > 1) {
        let result = Power(base, exponent >> 1);
        result = result * result;
        if((exponent & 1) === 1) {  // 幂次为奇数
            result = result * base;
        }
        return result;
    }

    throw new Error();
}

function numEquals(num1, num2) {
    return Math.abs(num1-num2) < 1E-10;
}

// test ----------------------------------------
let base = 0;
let exp = 0;
console.log(Power(base, exp), Math.pow(base, exp));