尝试计算 (a+b)^n 其中 n 是 BigDecimal 变量中的实数值,但 BigDecimal.pow 旨在仅接受整数值。
问问题
1376 次
2 回答
1
如果输入在 double 支持的幅度范围内,并且结果中不需要超过 15 个有效数字,则将 (a+b) 和 n 转换为 double,使用 Math.pow,并将结果转换回 BigDecimal。
于 2012-11-19T18:22:05.753 回答
1
只要您只是使用整数作为指数,您就可以使用一个简单的循环来计算 x^y:
public static BigDecimal pow(BigDecimal x, BigInteger y) {
if(y.compareTo(BigInteger.ZERO)==0) return BigDecimal.valueOf(1); //If the exponent is 0 then return 1 because x^0=1
BigDecimal out = x;
BigInteger i = BigInteger.valueOf(1);
while(i.compareTo(y.abs())<0) { //for(BigDecimal i = 1; i<y.abs(); i++) but in BigDecimal form
out = out.multiply(x);
i = i.add(BigInteger.ONE);
}
if(y.compareTo(BigInteger.ZERO)>0) {
return out;
} else if(y.compareTo(BigInteger.ZERO))<0) {
return BigDecimal.ONE.divide(out, MathContext.DECIMAL128); //Just so that it doesn't throw an error of non-terminating decimal expansion (ie. 1.333333333...)
} else return null; //In case something goes wrong
}
或者对于 BigDecimal x 和 y:
public static BigDecimal powD(BigDecimal x, BigDecimal y) {
return pow(x, y.toBigInteger());
}
希望这可以帮助!
于 2013-11-30T18:02:07.923 回答