Pi数字计算得出3.22。

4

我正在尝试使用以下公式计算圆周率: 圆周率/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 ...

   public class Calculator
{
  double process=1;
  double piValue=0;
  int approximation;
  double value;
  public Calculator( int precision)
  {
    approximation = precision;
  }

  public void calculate()
  {
    while(process<=approximation)
    {
      value = 1/(process+2);
      if(process%2==0)
      {
        value = value;
      }
      else
      {
        value = value * (-1);
      }
      piValue = piValue + value;
      process++;
    }
    System.out.println((1+piValue)*4.0);

  }
}

我看这里没什么问题,但我一直得到非常无意义的输出结果。下面是一些例子:
23. step: 3.1490100018286853 This is OK.
1501. step: 3.22874239242146
100,000 step: 3.2274312772602247

当"步数"无限增大时,它的极限大约是3.22。我该如何解决这个问题?

请注意,我刚刚开始学习Java。

提前致谢。


1
如果你要除以1、3、5、7等,应该使用1/(process * 2 - 1)而不是1/(process + 2) - Alex Salauyou
这个代码中的想法是什么?if(process%2==0) { value = value; ??? - ΦXocę 웃 Пepeúpa ツ
@Auberon 在循环内部,process 只被增加了一次,而不是两次。 - Alex Salauyou
@Auberon 清晰度?你在开玩笑吗? - Alex Salauyou
@Xoce웃Пepeúpa 判断步骤是偶数还是奇数。 - Burak Güneş
1个回答

5

在计算while循环顶部的value时,你使用了错误的process;你最终会计算出-1/3 + 1/4 - 1/5 + ....

改为

value = 1/(process+2);

尝试

value = 1/(2*process + 1);

现在这将通过从 3 开始的奇数数字提高分母,这是可以接受的,因为你最后加上了 1

有了这个改变和 1,501 次循环,我得到的是 3.1409268747021875,对于这种计算π的方法来说非常接近。(100,000 次循环会输出 3.141602653489781。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接