使用Java中的Leibniz系列编写程序来估计PI(π)

时间:2014-10-19 20:44:36

标签: java loops for-loop increment pi

我在网上看了好几个小时试图查看我是否能找到解决方案,而且我找到了许多解决方案,我的教授的指示如下:

  

使用以下系列编写程序来估计PI(π)。这个问题在第5章末尾的问题5.25中也有描述。如果你不熟悉系列,问题5.24是一个系列的单一通过,解决方案发布在家庭作业3课程模块中。
  π= 4 *(1-1 / 3 + 1 / 5-1 / 7 + 1 / 9-1 / 11 +⋯〖〗-1 ^(I + 1)/(2I-1))   显然,此问题没有用户输入,因此提供了修改后的工作表。您将编写一个程序,使用i值10,000到100,000计算PI,增量为10000.您的输出应如下所示:(提示:在System.out.println中将“/ t”放在i和PI的值之间将给你列。这是制表符。)

我________ PI

10000 ____ 3.xxxxx

20000 ____ 3.xxxx

30000 ____ 3.xxxx

  

您需要多个循环才能执行此操作。外循环将增加i。内循环将计算从1到i的系列。您可以使用三种类型的循环中的任何一种,for,while或do-while来执行此操作。

现在我很清楚除了这个之外还有很多方法可以更好地找到pi,但是这个任务的重点不是要有效地找到Pi而是用循环练习。但是我尝试了很多方法,所有方法都返回无限循环,输出不正确,或者它们只是不编译。

编辑:感谢Martijn Courteaux,我在代码方面取得了很大的进步。但是我仍然无法使计数正确增加。有什么建议? 我最近的尝试如下。

公共课LeibnizFormula {    public static void main(String [] args){

 System.out.println("i/t Pi");
  int count = 10000;
  double pi = 0;
  double denominator = 1;
  while(count < 100000){ 
      for (int x = 0; x < count; x++) {

        if (x % 2 == 0) {
          pi = pi + (1 / denominator);
        } 
        else {
          pi = pi - (1 / denominator);
        }
        denominator = denominator + 2;
      }
      pi = pi * 4;
      System.out.println(pi);
      count = count + 10000;
      System.out.println(count);
  }
}
}

现在的结果是:

i/t Pi
3.1414926535900345
20000
12.566037281026608
30000
50.264165790773355
40000
201.05666982975973
50000
804.2266826523694
60000
3216.9067325142446
70000
12867.626931247545
80000
51470.50772578291
90000
205882.03090368543
100000

我真的不明白为什么程序在我对“count”的值进行硬编码时是有效的,但在增加时却没有。我知道我听起来很乏味,但我真的很想知道出了什么问题以及为什么会出错。

我意识到简单地在这里发布解决方案并不好,所以我不是要求它,我只需要一些伪代码或指针。我已经做了很长一段时间了。谢谢

1 个答案:

答案 0 :(得分:1)

编写这个程序有更有效和简洁的方法,但最简单的解决方法是摆脱pi = pi * 4,因为while循环的下一次迭代将具有更大的{{1}值。 1}}开始。相反,只需打印pi而不是pi * 4

此外,这可能无关紧要,但实际上你提供的精度要高于所需的精度;例如,对于pi,精度实际上应该是count = 20000。你的内部for循环有count = 30000,并且由于x < count在每次迭代后增加10000,你实际上得到的精度为10000,30000,60000等。你可以通过重新初始化{的值来解决这个问题。每次迭代{1}}和count,或将denominator更改为pi