莱布尼兹近似-Java

莱布尼兹近似-Java,java,pi,Java,Pi,所以,我试图写一个程序,将近似PI。我想我的莱布尼茨公式是正确的,但我的数字出现了错误。有人能发现我代码中的错误吗?或者是完全搞砸了 import java.util.Scanner; public class Pi2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Number of sentances: ");

所以,我试图写一个程序,将近似PI。我想我的莱布尼茨公式是正确的,但我的数字出现了错误。有人能发现我代码中的错误吗?或者是完全搞砸了

import java.util.Scanner;
public class Pi2 {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Number of sentances: ");
    double sent = input.nextDouble();
    double den = 1;
    double LeiPI;
    for(int i = 0;i <= sent;i++)
    {
      double firstden = (1/den);
      double firstVAR = 1 - firstden;
      double secvar = (Math.pow(-1, (sent + 1)) / ((2 * sent) - 1));
      double thirdvar = firstVAR + secvar;
      LeiPI = 4 * thirdvar;
      for(int j = 0;j < i;j++)
      {
        if(i < j)
          den++;
        den++;
      }
      if(i == sent)
        System.out.println(LeiPI);
    }
  }
}
import java.util.Scanner;
公共类Pi2{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
系统输出打印(“句子数量:”);
double sent=input.nextDouble();
双den=1;
双雷皮;

对于(inti=0;i对不起,它完全搞砸了(你的话:o)

逐行检查您的代码:

double den = 1;
double LeiPI;
每次在for循环中,您都应该添加到
LeiPI
。如果不这样做,则所有迭代状态都处于
den
。您不能这样做,因为您必须初始化
LeiPI
,才能这样做,原因是

不清楚您在这里做什么。在中的单个术语中没有
1-任何东西
(显然有
1-1/3
):一切都只是
+/-1/分母

1 - 1/3 + 1/5 - 1/7 + 1/9 - ... = pi/4
无论如何:

  double secvar = (Math.pow(-1, (sent + 1)) / ((2 * sent) - 1));
这里的
-1
/((2*sent)-1)
是正确的,但分子应该是1

  double thirdvar = firstVAR + secvar;
  LeiPI = 4 * thirdvar;
  for(int j = 0;j < i;j++)
  {
    if(i < j)
      den++;
    den++;
  }
您应该在循环外部打印
LeiPI
,之前已经初始化了变量

}
我建议你忘记所有这些额外的变量:它们只是把它弄得乱七八糟,使它更难阅读。只要按照你在公式中看到的来实现这个术语

下面给出了您为
sent==100
声明的答案:

double LeiPI = 0;
for (int i = 0; i < sent; i++) {
  LeiPI += 4.0 * Math.pow(-1, i) / (2.0 * i + 1);
}
System.out.println(LeiPI);
double LeiPI=0;
for(int i=0;i
1)请缩进您的代码,使其可读。2)它做了什么,而不是您所期望的?当我输入时,比如说100,我的答案应该是3.131593,但如果(Iden++;den++;
是非常可疑的。这在语义上与
den++
相同,因为包含for循环的保护,所以for循环可以被删除并替换为
den+=i
。我猜这不是你想要的。我不明白你为什么要做
1-任何事来实现莱布尼兹公式。π=4(1-1/3+1/5+…+(-1)^i+1)/2-1)是我们使用的公式,其中“…”是用户输入的数字。
  if(i == sent)
    System.out.println(LeiPI);
}
double LeiPI = 0;
for (int i = 0; i < sent; i++) {
  LeiPI += 4.0 * Math.pow(-1, i) / (2.0 * i + 1);
}
System.out.println(LeiPI);