我正在尝试执行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,我很长]
答案 0 :(得分:6)
Math.pow
返回double
。 double
的大小只有64位。它可以代表大数字,但不准确。将其转换为BigDecimal然后转换为BigInteger并不会使其更准确。
使用pow
本身上的BigInteger
方法做您想做的事情:
BigInteger goodOne = BigInteger.TEN.pow(23);