试图用循环估计e ^ x

时间:2014-02-28 01:31:55

标签: java for-loop while-loop exponential

我一直盯着这几个小时,我似乎无法弄清楚为什么我的输出太小了。我的输出做你期望的,平衡,他们只是平衡到错误的值。我非常肯定错误在于我的main方法的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();
        }
}

1 个答案:

答案 0 :(得分:4)

问题在于你的“f”变量。您每次都在尝试计算该值,但最终会以旧值开始。

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