我在网上看了好几个小时试图查看我是否能找到解决方案,而且我找到了许多解决方案,我的教授的指示如下:
使用以下系列编写程序来估计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”的值进行硬编码时是有效的,但在增加时却没有。我知道我听起来很乏味,但我真的很想知道出了什么问题以及为什么会出错。
我意识到简单地在这里发布解决方案并不好,所以我不是要求它,我只需要一些伪代码或指针。我已经做了很长一段时间了。谢谢
答案 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
。