泰勒级数。程序进行更少的迭代

Taylor series. Program does fewer iterations

所以我需要使用泰勒级数的分解形式递归计算 e^x:

等式:e^x = 1 +x + (x^2)/2! + ... + ((x^n)/n!))

U(n) = U(n-1)*(x/n)

断点|U(n)| < 每股收益

package lab2;
import java.util.Scanner;

public class Lab2 {
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner in = new Scanner(System.in);
        System.out.println("Enter x: ");
        int x = in.nextInt();
        System.out.println("Enter 0 < e < 1: ");
        double e = in.nextDouble();
        double result = 1.0;
        int n = 1;
        double U = x / n;
        while (Math.abs(U) >= e)
        {
            double fa = 1;
            for (int i = 1; i <= n; i++)
                fa *= i;
            result += Math.pow(x, n) / fa;
            U *= x / ++n;
        }
        System.out.println("e^x = " + result);
    } 
}

它只工作了 x+1 次,然后调试说 U 等于 0 并且它是我们的断点。我不明白为什么会这样。你能帮帮我吗?

由于 xn 是整数,因此将使用 integer division 将它们相除。只有在除法下降后,结果才会提升为 double,以便存储在 U 中。为了执行浮点除法,您可以将 x 定义为 double 或在除法时显式转换它:

double U = ((double) x) / n;