无法让程序正确近似 pi

  • 本文关键字:pi 程序 java pi
  • 更新时间 :
  • 英文 :


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

这是我得到的程序说明:

(计算π(可以使用以下公式估算π: 圆周率 += 符号/(2 * i - 1.0(;其中 i 是 for 循环中变量的名称,pi 是 π 变量的>名称,符号在声明时初始值为 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 个小时,最终让我感到沮丧,因为我想弄清楚。

回顾说明...他们说"...符号在声明时具有 1 的初始值 1,并且>在 for 循环中设置为等于自身的负数"。您正在设置

sign = -2;

在每次迭代中。

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

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

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

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);
}
    }
}

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

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

for 循环定义应该如下所示

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

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

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

    if(pi/10000)
    pi *= 4

最新更新