我正在尝试通过对以下数字系列求和来制作一个近似 e 的程序:
e = 1 + (1 / 1!) + (1 / 2!) + (1 / 3!) .... + (1 / i!)
目前,我的代码如下所示:
public static void main(String[] args) {
BigDecimal one = new BigDecimal(1);
BigDecimal e = new BigDecimal(1.0);
BigDecimal divisor = new BigDecimal(1.0);
for (int i = 1; i <= 12; i++) {
divisor = divisor.multiply(new BigDecimal(i));
e = e.add(one.divide(divisor));
System.out.println("e = " + e);
}
}
该程序成功执行计算(1 / n!)为 n <= 2,但只要 n >= 3 我收到一条错误消息。似乎程序无法处理大于 2 的除数。程序的输出是:
e = 2
e = 2.5
线程“主”java.lang.ArithmeticException 中的异常:非终止十进制扩展;没有精确可表示的十进制结果。在 java.math.BigDecimal.divide(Unknown Source) at ch10.Chapter_10_E20_ApproximateE.main(Chapter_10_E20_ApproximateE.java:16)
我应该如何使用 BigDecimal 类对 e = 1 + (1 / 1!) + (1 / 2!) + (1 / 3!) .... + (1 / i!) 进行求和?