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

Java 执行具有长指数值的Math.pow()操作的最佳方法是什么?,java,biginteger,pow,Java,Biginteger,Pow,我正在尝试执行一个Math.pow()操作,以查找长数字幂的10。结果预计会非常大,因此,我将它存储在一个BigInteger中。我尝试了以下方法: tempBigInt = java.math.BigDecimal.valueOf(Math.pow(10, i)).toBigInteger(); 我通过一个循环运行这个过程,在这个循环中,“I”不断增加,直到满足某个条件。除了计算Math.pow(10,23)之外,这段代码工作正常。奇怪的是,这是唯一出现错误的值,从而使我的最终结果不正确 我

我正在尝试执行一个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)。可能是个虫子。如果有人知道是什么导致了这种不寻常的行为,请您解释一下,并提供一种更好的、无bug的方法来实现这一行代码,好吗?[tempBigInt是一个大整数,i是一个长整数]

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

使用
biginger
本身上的
pow
方法执行您想要的操作:

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

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

使用
biginger
本身上的
pow
方法执行您想要的操作:

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

tempBigInt=biginger.valueOf(10).pow(i)
应该为
i
的所有正值生成正确的结果,直到max int,前提是您有足够的内存来存储结果。谢谢@dasblinkenlight。您的解决方案也有效。
tempBigInt=biginger.valueOf(10).pow(i)
应该为
i
的所有正值生成正确的结果,直到max int,前提是您有足够的内存来存储结果。谢谢@dasblinkenlight。您的解决方案也很有效。非常感谢@Erwin Bolwidt!你的解释很清楚。我也试过了,它能按要求工作。非常感谢@Erwin Bolwidt!你的解释很清楚。我也试过了,它能按要求工作。