2

尝试计算 (a+b)^n 其中 n 是 BigDecimal 变量中的实数值,但 BigDecimal.pow 旨在仅接受整数值。

4

2 回答 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 回答