无法使程序正确地近似pi

时间:2013-10-11 18:33:03

标签: java pi

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

这是我执行该程序的指示:

  

(计算π)您可以使用以下公式近似π:   pi + = sign /(2 * i - 1.0);其中i是for循环中变量的名称,pi是π的变量的名称,并且sign在声明时的初始值为1,并且for循环中的>设置为等于负的本身。确保使用for循环>进行此分配。 for循环的起始值应为2,当i小于或等于100000时,结束值应为>。如果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个小时,而且最终让我感到沮丧,因为他试图弄明白。

3 个答案:

答案 0 :(得分:0)

回头看一下说明......他们说“......声明时声明初始值为1,并且for循环中的&gt;设置为等于其自身的负数”。你正在设置

sign = -2;

每次迭代。

他们还说“for循环的起始值应为2 ......”。

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

使for循环的起始值为10000。

答案 1 :(得分: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);
}
    }
}

答案 2 :(得分: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