执行具有长指数值的Math.pow()操作的最佳方法是什么?

时间:2018-02-12 02:23:11

标签: java biginteger pow

我正在尝试执行Math.pow()操作,以找到10个长数的幂。结果预计会非常大,因此,我将其存储在BigInteger中。我尝试了下面的内容:

tempBigInt = java.math.BigDecimal.valueOf(Math.pow(10, i)).toBigInteger();

我通过一个循环来运行它,其中'i'一直在增加,直到满足某个条件。此代码工作正常,除非它计算Math.pow(10,23)。奇怪的是,这是唯一出错的价值,从而使我的最终结果不正确。

我也试过通过我的IDE验证这一点,看起来Java不喜欢Math.pow(10,23)。可能是一个错误。如果有人知道是什么导致了这种异常行为,你能否解释一下,并且可能提供一种更好,无错误的方法来实现这一行代码? [tempBigInt是一个BigInteger,我很长]

1 个答案:

答案 0 :(得分:6)

Math.pow返回doubledouble的大小只有64位。它可以代表大数字,但不准确。将其转换为BigDecimal然后转换为BigInteger并不会使其更准确。

使用pow本身上的BigInteger方法做您想做的事情:

BigInteger goodOne = BigInteger.TEN.pow(23);