BigDecimal Exponentiation

时间:2013-11-26 01:58:26

标签: java algorithm bigdecimal exponentiation

我正在制作一个自定义BigDecimal类(用于练习和无聊)并且有用于加法,减法,乘法和除法的定制算法,我想为求幂做一个函数,但是因为有一个幂小数部分涉及n根,我可以想到没有简单的取幂方法。我的类通过两个BigInteger工作(不是java.math.BigInteger类,而是我自己的包含String BigInteger.number的类,其中包含数字boolean BigInteger.negative,显然,它告诉我这个数字是不是否定。),其中一个是数字的整数部分(BigInteger BigDecimal.ipart),另一个是分数部分(BigInteger BigDecimal.fpart。)它还包含boolean BigDecimal.negativelong BigDecimal.precission ,它定义了划分的准确程度。我的问题是,是否存在能够与我当前设置配合良好的算法?

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

1 个答案:

答案 0 :(得分:2)

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

由于你的数字总是真正的有理数,正如你所提到的,所有你需要的是整数求幂算法,第n个根算法,并仔细检查以确认它是否存在(例如sqrt(-1)应该是NaN)。有各种算法只使用+ - * /来计算第n个根,例如Newton's method

更新: here's another n-th root algorithm只有整数算术。

另外,如果你有效地实现整数取幂,你可以二进制搜索答案。

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