我正在尝试使用BigDecimal.pow(int i)
非常大的基数和指数,但是我遇到了ArithmeticException: Underflow
错误。
简单地说,代码是:
BigDecimal base = BigDecimal.valueOf(2147483645.4141948);
BigDecimal product = base.pow(987654321);
System.out.println("product = " + product.toPlainString());
是的,这是一个 Project Euler 问题。但是我知道我的数字是正确的。这不是一个数学问题,纯粹是我不明白为什么BigDecimal.pow(int i)
给我一个ArithmeticException: Underflow
.
我知道BigDecimal
'sscale
是 32 位的int
,但是有什么办法可以绕过它并计算出这么大的值吗?如果有帮助,我确实计划为产品铺地板并对其进行改装,100000000
因为我只想要最后 8 位数字。如果有任何其他方法可以在数学上做到这一点,我想要一个提示。
堆栈跟踪:
Exception in thread "main" java.lang.ArithmeticException: Underflow
at java.math.BigDecimal.checkScale(BigDecimal.java:3841)
at java.math.BigDecimal.pow(BigDecimal.java:2013)
at test.main(test.java:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code 1
谢谢。