0

我目前正在学习 Java,我的一项任务是使用教授给我们的某个公式来近似 pi,我们必须使用 for 循环。方向对我来说不是很清楚,但我的程序非常接近,但我无法弄清楚为什么 pi 的值很接近,但不是每个间隔应该是什么。

这是我执行该程序的说明:

(计算 π)您可以使用以下公式近似 π:pi += sign / (2 * i - 1.0); 其中 i 是 for 循环中变量的名称,pi 是 π 的变量名称,sign 在声明时的初始值为 1,并且在 for 循环中设置为等于自身的负数。确保使用 for 循环 > 进行此分配。当 i 小于或等于 100000 时,for 循环的起始值应为 2,结束值应 >。如果 pi 除以 10000 的值为零,则 >pi 应为 (4 * pi)。

这是我想出的代码。

public class Ch4PA1
{
public static void main(String[] args) {
//Declarations
double pi = 1;
double sign = 1;

for  (int i = 10000; i <= 100000; i += 10000)
{
    pi = 3.14159265359;
    sign = -2;
    pi += sign / (2 * i - 1.0);
    System.out.println("i : " + i + " The PI is " + pi);
}
    }
}

我只是想不通我做错了什么,我已经在这个程序中休息了大约 10 个小时,结果只是让我感到沮丧,因为我想弄清楚它。

4

3 回答 3

0

回顾一下指令......他们说“......sign 在声明时的初始值为 1,并且 > 在 for 循环中设置为等于其自身的负数”。你正在设置

sign = -2;

在每次迭代中。

他们还说“for 循环的起始值应该是 2...”。你有

for  (int i = 10000; i <= 100000; i += 10000)

这使得for循环的起始值为 10000。

于 2013-10-11T18:38:00.953 回答
0
public class Ch4PA1
{
public static void main(String[] args) {
//Declarations
double pi = 1;
double sign = 1;

for  (int i = 2; i <= 100000; ++i) //Switched the starting value to 2, and the increment to 1
{
    pi = 3.14159265359;
    pi += sign / (2 * i - 1.0);
    if (sign > 0){ //you were constantly doing a -2 as oppose dto switching what the sign currently is. Notice I do it after your sign calculation so that it switches the sign AFTER the first iteration as instructed.
      sign = -1;
    }
    else sign = 1;

    System.out.println("i : " + i + " The PI is " + pi);
}
    }
}
于 2013-10-11T18:42:34.027 回答
0

从我可以从问题中理解,sign 在声明时的初始值为 1,并且在 for 循环内设置为等于自身的负数。

    pi += (-sign) / (2 * i - 1.0);

for 循环定义应该更像下面

    for(int i=2; i<=100000 ; i++)

我仍然不明白这个问题以及为什么在每次循环后将循环变量 i 增加到 10000 的原因。

循环内还应该有一个 IF 条件,如下所示

    if(pi/10000)
    pi *= 4
于 2013-10-11T18:44:08.510 回答