1

我正在制作一个自定义的 BigDecimal 类(用于练习和无聊),并有用于加法、减法、乘法和除法的定制算法,我想为求幂创建一个函数,但因为有小数部分的幂涉及 n 根,我想不出简单的求幂方法。我的类通过有两个 BigInteger 工作(不是 java.math.BigInteger 类,而是我自己的类,其中包含String BigInteger.number其中包含数字,boolean BigInteger.negative并且显然告诉数字是否为负数。),其中一个是整数数字的一部分(BigInteger BigDecimal.ipart),另一个是小数部分(BigInteger BigDecimal.fpart。)它还包含boolean BigDecimal.negativeand long BigDecimal.precission,它定义了除法的精确度。我的问题是,是否存在适用于我当前设置的算法?

注意:这两个 .java 文件可以在这里找到.. BigInteger.java & BigDecimal.java

4

1 回答 1

2

通常,pow(a,b) 计算为 exp(b * ln(a))。exp() 和 ln() 都从它们的序列(例如this)中计算到一定的精度。您所需要的只是您已经拥有的加法、减法、乘法和除法运算。

由于您的数字始终是真正的有理数,正如您所提到的,您所需要的只是整数求幂算法、第 n 根算法,并仔细检查以确认它存在(例如 sqrt(-1) 应该是 NaN)。有多种算法仅使用 +-*/ 来计算第 n 个根,例如牛顿法

更新: 这是另一个只有整数运算的第 n 根算法。

此外,如果您有有效的整数取幂实现,您可以二进制搜索答案。

这些是我现在能想到的最简单的方法,适合您当前的设置。

于 2013-11-27T17:43:25.703 回答