gpt4 book ai didi

java - 编写自定义代码来计算 BigDecimal 幂

转载 作者:行者123 更新时间:2023-12-02 05:34:28 30 4
gpt4 key购买 nike

我正在开发一个计算器,以便更好地学习 Java。我编写了自己的代码来使用 BigDecimal 参数计算幂。截至目前,代码无法处理分数幂,例如 2^2.2。为了解决这个问题,我想在我的代码中实现指数恒等式X^(A+B)=X^A*X^B

如何判断我的BigDecimal参数op2小数点右侧是否有数字,然后判断该值是多少?例如,代码将识别 op2 = 2.2 = 2.0 + 0.2

我知道 BigDecimal 的 scale() 函数,但我不确定它是如何工作的。例如,

BigDecimal bd = new BigDecimal(2.1);
System.out.println(bd.scale());
> 51
BigDecimal bd = new BigDecimal(2.2);
System.out.println(bd.scale());
> 50

以下是计算幂的当前代码:

public static BigDecimal power(BigDecimal op1, BigDecimal op2)
{
boolean isOp1Zero;
if (op1.compareTo(new BigDecimal(0)) == 0)
isOp1Zero = true;
else
isOp1Zero = false;

int distFromZero = op2.compareTo(new BigDecimal(0));

//x^0 = 1
if (distFromZero == 0)
return new BigDecimal(1);

//0^positive = 0
else if (isOp1Zero && distFromZero == 1)
return new BigDecimal(0);

//non-zero^positive
else if (!isOp1Zero && distFromZero == 1)
{
BigDecimal power = op1;
for (int i = 1; i < op2.intValueExact(); i++)
{
power = power.multiply(op1);
}

return power;
}

//0^negative undefined
else if (isOp1Zero && distFromZero == -1)
throw new IllegalArgumentException("Error - zero to negative power");

//non-zero^negative
else if (!isOp1Zero && distFromZero == -1)
{
BigDecimal power = op1;
BigDecimal op2NoSign = op2.multiply(new BigDecimal(-1));
for (int i = 1; i < op2NoSign.intValueExact(); i++)
{
power = power.multiply(op1);
}

return new BigDecimal(1).divide(power);
}
return null;
}

任何建议表示赞赏!谢谢。

最佳答案

您可以检查使用bd.remainder(BigDecimal.ONE):

BigDecimal fraction = bd.remainder(BigDecimal.ONE)
BigDecimal whole = bd.subtract(fraction)

这适用于正大数。

顺便说一下,我不知道这对你有什么帮助。如何计算X^0.4? (也就是说,不诉诸对数)

关于java - 编写自定义代码来计算 BigDecimal 幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146631/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com