-3

是否可以用一种方法计算 1000 次迭代中的欧拉数,我是否需要首先计算阶乘?

这是我的代码:

import java.math.BigDecimal;

public class EulerNumber {

    public static void main(String[] args) {
        for (int i = 1; i < 1000; i++) { 
        }
        System.out.println("e = " + e);
    }

    private static double Euler() {
        return 0;
    }
}
4

2 回答 2

2

这很简单,如果我理解正确,您需要在 1000 次迭代中计算欧拉数,而不是计算 1000 次,所以应该将 for 循环移到欧拉函数中。

public class EulerNumber {

    public static void main(String[] args) {
        System.out.println("e = " + Euler());
    }

    private static double Euler() {
        double e=1;
        double f=1;
        for ( int i=1; i <= 1000; i++) {
            f = f * (1.0 / i);
            if ( f == 0 ) break;
            e +=  f;
        }
        return e;
    }
}

e 是目前估计的欧拉数,f 是在下一个操作中添加的分数(1/n!)。你不必计算n!每次,最好在进行时进行计算。我已经检查并知道 1000 对于双精度来说太高了,因为 f 在我的计算机中迭代 178 次后收敛到 0。所以剩下的过程是没有必要的。

于 2016-08-21T17:53:23.767 回答
1

是的,可以用 1000 项的部分总和计算超过 2300 个正确数字的近似值。误差小于2/1000!(幅度为 1/300^1000)

不,没有必要计算阶乘,并且在任何情况下,都应该避免显式阶乘函数,只需从前一项更新下一项或从上一项开始使用类似霍纳的方案。

于 2016-08-21T17:24:54.783 回答