// 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));