用Java更好地逼近e

Sha*_*ron 5 java math precision

我想将e的值近似为任何所需的精度.做这个的最好方式是什么?我能得到的最多是e = 2.7182818284590455.有关修改以下代码的任何示例将不胜感激.

public static long fact(int x){
    long prod = 1;
    for(int i = 1; i <= x; i++)
        prod = prod * i;
    return prod;
}//fact

public static void main(String[] args) {
    double e = 1;
    for(int i = 1; i < 50; i++)
        e = e + 1/(double)(fact(i));
    System.out.print("e = " + e);
}//main
Run Code Online (Sandbox Code Playgroud)

Zed*_*Zed 13

使用BigDecimal而不是double.

BigDecimal e = BigDecimal.ONE;
BigDecimal fact = BigDecimal.ONE;

for(int i=1;i<100;i++) {
  fact = fact.multiply(new BigDecimal(i));

  e = e.add(BigDecimal.ONE.divide(fact, new MathContext(10000, RoundingMode.HALF_UP)));
}
Run Code Online (Sandbox Code Playgroud)

  • @flybywire:未设置精度,也修复了它.这次我还尝试在"发布"之前运行代码:). (2认同)

Mic*_*rdt 6

你的主要问题是double精度非常有限.如果你想要任意精度,你将不得不使用BigDecimal.你要遇到的下一个问题是long,你可以使用的阶乘有限的范围很快就会超过你BigInteger.