2
/**
 * @(#)precision1.java
 *
 * precision1 application
 *
 * @author 
 * @version 1.00 2013/11/15
 */

public class precision1 {

    public static void main(String[] args) {

        // TODO, add your application code

        int x = 4;
        double increment = 1 ;
        double coefficient = 1;
        double currentValue = 1;
        double precision = 0.01;

        for( int i = 1;increment>precision ;i++)
        {
            currentValue= Math.pow(x,i)*coefficient+currentValue;
            increment= Math.abs (Math.pow(x,i)*coefficient);
            coefficient = coefficient * (1/(i+1));
            System.out.println("Current result: " + currentValue);
        }

    }
}

问题是:如果给出数字 2,它应该向用户询问一个整数 x 和一个精度。它应该使用用户输入的 x,使用下面给出的公式计算 e 对 x 次方的近似值。只要增量小于给定的精度值,您的程序就会停止计算。它也应该写成一个方法,而不是直接写在你的 main 方法中。 公式

输出应该是:

current result: 5.0
current result: 13.0
current result: 23.666666666666664
current result: 34.33333333333333
current result: 42.86666666666666
current result: 48.55555555555555
current result: 51.8063492063492
current result: 53.43174603174603
current result: 54.15414462081129
current result: 54.44310405643739
current result: 54.54818021484688
current result: 54.583205600983376
current result: 54.59398264287153
current result: 54.59706179769672
Result is 54.59706179769672

我的代码的输出是:

Current result: 5.0
Current result: 5.0

无论询问输入部分为什么我的代码不起作用?

4

4 回答 4

2

通过调试器快速运行它 - (1/(i+1))是整数除法,导致coefficient = coefficient * (1/(i+1)); 评估为 0,因此 increment= Math.abs (Math.pow(x,i)*coefficient); 评估为 0

于 2013-11-14T22:43:44.113 回答
0

你的系数是错误的。您应该将其设置为 1/(1+i)。随着其他用户发现您使用整数这一事实。

于 2013-11-14T22:44:09.037 回答
0

您的问题是表达式中的整数除法1/(i+1)- 对于任何i >=2.

我建议你改变

coefficient = coefficient * (1/(i+1));

coefficient = coefficient / (i+1);

甚至只是

coefficient /= i + 1;

两者都将正确评估,因为coefficient是双重的。

于 2013-11-14T22:44:35.667 回答
0

您的数字被定义为整数,而不是双精度数。

for (int i = 1; increment > precision; i++) {
    currentValue = Math.pow(x, i) * coefficient + currentValue;
    increment = Math.abs(Math.pow(x, i) * coefficient);
    coefficient = coefficient * (1d / (i + 1d)); // here is fix

    System.out.println("Current result: " + currentValue);
}
于 2013-11-14T22:54:00.287 回答