我正在尝试使用 BigDecimals 以高精度计算欧拉数,但过了一会儿,数字变得如此之小,以至于 JVM 抛出除以 0 错误。关于如何克服的任何想法?我发现 try-catch 块总是在 34 次除法迭代之后被调用,但我不知道为什么。欧拉数的公式是一个无限级数,因此 34 次迭代使其接近e的实际值,但不如我想要的准确。它实际上并不是除以 0,但对于 JVM 来说它可能太小而无法区分。
BigDecimal ee = BigDecimal.ZERO;
for (int k = 0; k < 50; k++) {
int fact = factorial(k);
try {
BigDecimal trial = BigDecimal.ONE.divide(BigDecimal.valueOf(fact), 100, RoundingMode.CEILING);
} catch (Exception e) {
System.out.println("---- Div-by-0 error; Iterated " + k + " times ----");
break;
}
ee = ee.add(BigDecimal.ONE.divide(BigDecimal.valueOf(fact), 100, RoundingMode.CEILING));
}
System.out.println("\n---- Final: \t\te = " + power(ee, x));
}