【问题标题】:Compute a series计算一个序列
【发布时间】:2012-02-03 11:55:25
【问题描述】:

作业:编写一个方法来计算以下系列: m(i) = 1 - (1/2) + (1/3) - (1/4) + (1/5) - ... + ((-1)^(i+1))/i

编写一个显示以下代码的测试程序:

i:       m(i):
5        0,78333
10       0,64563
..       ..
45       0,70413
50       0,68324

我已经尝试了几个小时,但我就是想不出如何解决这个问题。也许我只是愚蠢的哈哈:)

到目前为止,这是我的代码:

package computingaseries;

public class ComputingASeries {

    public static void main(String[] args) {

        System.out.println("i\t\tm(i)");
        for (int i = 5; i <= 50; i += 5) {
            System.out.println(i + "\t\t" + m(i));
        }
    }

更新:

    public static double m(int n) {
        double tal = 0;
        double x = 0;

        for (int i = 1; i <= n; i += 1) {
            if (i == 1) {
                x = 1 - ((Math.pow(-1, (i + 1))) / i);
            } else {
                x = ((Math.pow(-1, (i + 1))) / i);
            }
        }
        tal += x;

        return tal;

    }
}

我的错误输出:

i       m(i)
5       0.2
10      -0.1
15      0.06666666666666667
20      -0.05
25      0.04
30      -0.03333333333333333
35      0.02857142857142857
40      -0.025
45      0.022222222222222223
50      -0.02

【问题讨论】:

  • 提示,^ 并不是你想象的那样强大。
  • 另外,整数除法和浮点除法的区别是根本的。
  • Math.pow 现在可以工作了,谢谢 :) 但是输出错误:/

标签: java math series


【解决方案1】:

定义x时必须去掉“1-”,即x = ((-1)^(i+1))/i

编辑

x==1 没有特殊情况,x 总是定义为 x=Math.pow(-1,i+1)/i。注意 ((-1)^(1+1))/1 = ((-1)^2)/1 = 1/1 = 1。 tal +=x 也进入 for 循环。

【讨论】:

  • 还有 Dan W 的回答是对的,你必须使用正确的算子才能获得力量
  • 所以我已经按照你说的去掉了“1-”,现在看起来还好吗?
  • Math.pow 工作,但输出完全搞砸了。你能发现问题吗?更新代码@top :)
  • 这是不正确的,因为 x 的定义总是 x = ((Math.pow(-1, (i + 1))) / i); i==1 没有特殊情况,即 ((-1)^(1+1))/1 = ((-1)^2)/1 = 1/1 = 1,即该系列。 tal += x 也进入 for 循环
  • 任何 i 都没有特殊情况。代码应如下所示: double tal = 0;双 x = 0; for (int i = 1; i
【解决方案2】:
public class SpecialSeries {

    public static double m(int n){
        double sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += Math.pow(-1, (i+1))/(double)i;
        }  
        System.out.println(n+"\t"+sum);
        return sum;
    }  

    public static void main(String[] args) {
        System.out.println("i:\tm(i)");
        for (int i = 5; i < 50; i+=5) {
            m(i);
        }
    }
}

你可以在这里运行它ideone

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2010-12-23
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多