泰勒系列。程序执行的迭代次数更少

时间:2017-10-03 23:21:27

标签: java taylor-series

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

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

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

断点| U(n)| < EPS

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及其断点。我不明白为什么会这样。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

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

double