执行具有长指数值的 Math.pow() 操作的最佳方法是什么?
What is the best way to perform a Math.pow() operation having a long exponent value?
我正在尝试执行 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,而 i 是一个 long]
Math.pow
returns一个double
。 double
的大小只有 64 位。它可以表示大数字,但不准确。将其转换为 BigDecimal 然后再转换为 BigInteger 不会使其更准确。
在 BigInteger
本身上使用 pow
方法来执行您想要的操作:
BigInteger goodOne = BigInteger.TEN.pow(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)。可能是一个错误。如果有人知道是什么导致了这种异常行为,您能否解释一下,并可能提供一种更好且无错误的方法来实现这行代码? [tempBigInt 是一个 BigInteger,而 i 是一个 long]
Math.pow
returns一个double
。 double
的大小只有 64 位。它可以表示大数字,但不准确。将其转换为 BigDecimal 然后再转换为 BigInteger 不会使其更准确。
在 BigInteger
本身上使用 pow
方法来执行您想要的操作:
BigInteger goodOne = BigInteger.TEN.pow(23);