给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解答:默认0的所有次方都为0(包括0的0次方,和0的负幂次方)
a>>1 表示 a/2
a<<1 表示 a×2
判断奇偶:n%2==1 或 (n&1)==1
public class T_12_Power {
//非递归方式
public double Power(double base, int exponent) {
double result = base;
int n = exponent;
if (exponent == 0) {
return 1;
}
if (exponent < 0) {
exponent = -exponent;
}
for (int i = 2; i <= exponent; i++) {
result *= base;
}
return n < 0 ? 1 / result : result;
}
//递归方式
public double getTheResult(double base, int exponent) {
if (exponent == 0) {
return 1;
} else if (exponent == 1) {
return base;
} else {
double res = getTheResult(base, exponent >> 1);
res *= res;
if ((exponent & 1) == 1) {
return res *= base;
}
return res;
}
}
public double Power2(double base, int exponent) {
boolean isNegetive = false;
if (exponent < 0) {
exponent = -exponent;
isNegetive = true;
}
double result = getTheResult(base, exponent);
if (isNegetive) {
return 1 / result;
} else {
return result;
}
}
}
本文介绍了一种高效计算浮点数的幂次方的方法,通过非递归和递归两种方式实现快速幂运算,特别适用于大指数的情况。文章详细解释了如何利用位操作判断指数的奇偶性,并通过重复平方来减少乘法次数,从而提高运算效率。
184

被折叠的 条评论
为什么被折叠?



