Java小问题利用泰勒级数

1、利用泰勒级数 e = 1 + 1/1! + 1/2! + 1/3! + …….+ 1/n! 计算e的近似值,
直到前后两次计算的误差小于10-6。

public class taiLe {
    public static void main(String[] args) {
        double e=2,i=1;
        double a=0,b=0;
        while(true){
            a=1/i;
            i=i*(i+1);
            b=1/i;
            if(a-b<1e-6) break;
            e+=1/i;
        }
        System.out.println(e);
    }
}


输出2.69103020675716
不应该是2.71左右吗

你的程序在计算误差时只比较了连分数中两个相邻分母对应的两项,这并不一定保证前后两次计算的误差小于 10^-6。另外,你的循环中第一次计算是2,而应该是1。

正确的计算方式是:每次迭代后统计新增的一项对整个和的贡献值,并将其计入当前的和值中;每当新增的一项对和值的贡献值小于

写的有点小问题,在计算每一项的时候,应该用上一项的结果,还有用双精度浮点数存储结果可能会导致精度丢失,可以用用了科学计数法表示误差的阈值

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/334177
  • 除此之外, 这篇博客: (Java)求e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ...+1/n!该式子最终计算结果中的 标题: 计算e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + …+1/n! 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    ***【题目详述】***:题目中方法的参数n是代表计算多少项
    (下面代码中给了10项)
    【代码演示】:

    public class CalcE {
        //利用迭代方式计算阶乘
        public static long factoria2(int n){
            int r=1;
            for(int i=1;i<=n;i++){
                r*=i;
            }
            return r;
        }
    
        public static long calcE(int n){
            long e=0;
            for(int i=0;i<=n;i++){
                e+=(1.0/factorial(i));
            }
            return e;
        }
        public static void main(String[] args) {
        //该题是计算10项的值:
            System.out.println(calcE(10));
        }
    }
    
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^