Java 尝试用循环估计e^x

Java 尝试用循环估计e^x,java,for-loop,while-loop,exponential,Java,For Loop,While Loop,Exponential,我已经盯着这个看了几个小时了,我似乎不明白为什么我的输出太小了。我的输出符合你的期望,稳定下来,它们只是稳定到错误的值。我非常确定错误在我的主方法的while循环中,或者嵌套for循环中,但我会继续并发布所有内容,以防它隐藏在其他地方 该程序的目的是通过求和1+x+x^2/2!+来估计e^x的值x^3/3!+…+x^n/n!。它需要将n的总和输出到1和10之间的每个值,以及50和100的值。所以总共有12个输出 import java.io.*; import java.text.Decimal

我已经盯着这个看了几个小时了,我似乎不明白为什么我的输出太小了。我的输出符合你的期望,稳定下来,它们只是稳定到错误的值。我非常确定错误在我的主方法的while循环中,或者嵌套for循环中,但我会继续并发布所有内容,以防它隐藏在其他地方

该程序的目的是通过求和1+x+x^2/2!+来估计e^x的值x^3/3!+…+x^n/n!。它需要将n的总和输出到1和10之间的每个值,以及50和100的值。所以总共有12个输出

import java.io.*;
import java.text.DecimalFormat;

public class Ch3Ex7
{
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static double x = 0;
    static DecimalFormat df = new DecimalFormat("0.00"); 
    public static void main (String[] args)
    {
        mainMenu();
        int counter = 1;    
        double heldx = x;
        double holderx = 0;
        double denom = 1;
        double printx = 0;
        double f = 1;

        while (counter != 100)
         {
            x = x*heldx;
            denom++;
                        for(int i = 2; i<=denom; i++)
                        {
                                f = f*i;
                        }
            holderx = holderx + x/f;        
            if ((counter > 0 && counter <= 10) || (counter == 50))
            {

                printx = 1 + heldx + holderx;
                System.out.println(df.format(printx));

            }

            counter++;          
        }
        System.out.println(df.format(printx));
        f = 0;
        x = 0;
        counter = 1;
        denom = 1;
        callMain();
    }

    public static void mainMenu()
    {
        try
        {   
            System.out.println("Requesting user input, press 0 to leave");
            x = Integer.parseInt(br.readLine());
            space();
            if (x == 0)
            {
                System.exit(0);
            }


        }   
        catch(IOException ioe) {}
    }

    public static void callMain()
    {
        String[] x = {"A" , "B"};
        Ch3Ex7.main(x);
    }

    public static void space()
    {
        System.out.println();
        }
}
import java.io.*;
导入java.text.DecimalFormat;
公共类Ch3Ex7
{
静态BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
静态双x=0;
静态分贝格式df=新分贝格式(“0.00”);
公共静态void main(字符串[]args)
{
主菜单();
int计数器=1;
双heldx=x;
双保持器x=0;
双denom=1;
双打印x=0;
双f=1;
while(计数器!=100)
{
x=x*heldx;
denom++;
对于(int i=2;i 0&&counter而言,问题在于“f”变量。您每次都试图计算该值,但最终都以旧值开始

摆脱for循环,在其位置添加
f*=denom;

问题在于“f”变量。您每次都试图计算该值,但最终都是从旧值开始


摆脱for循环,并在其位置添加
f*=denom;

它们对每个输入值都是错误的吗?它们是否接近?与其强迫我们编译并尝试您的程序,不如向我们展示几个值的输出?它们对每个输入值都是错误的吗?它们是否接近?而不是强迫我们编译并尝试您的程序,可以吗向我们展示几个值的输出?我认为需要在denom++之后,而不是之前。我认为需要在denom++之后,而不是之前。