Java:编码 Wallis 乘积以求 pi

Java: coding the Wallis product to find pi

我正在尝试使用 Wallis 乘积公式编写代码来输出 pi:https://en.wikipedia.org/wiki/Wallis_product

这是我的代码:

public class PI {
    public static void main(String[] args) {
      pI();
    }

    public static void pI () {

    double pi = 0;
    int a = 0;
    int b = 1;
    double denom = 0;
    double num = 0;
    int temp = 0;
    int count = 0;
    double halfpi = 1;


        while(true) {
          temp = b;
          b = temp + 2;
          denom = temp*b;

          a += 2;
          num = a*a; 

          halfpi *= (num/denom);
          count++;

          System.out.println(halfpi*2);                    
        }    
    }
}

我发现在循环超过大约 33000 次迭代之前,代码工作正常。在这一点之后它只打印:“-0.0”:

-0.0
-0.0
-0.0
-0.0
-0.0
...

----jGRASP: process ended by user.

可能是什么原因造成的?

redFIVE 是对的。你正在混合 int 和 double 这会导致问题。这会解决它

public class PI {
    public static void main(String[] args) {
      pI();
    }

    public static void pI () {

    double pi = 0;
    double a = 0;
    double b = 1;
    double denom = 0;
    double num = 0;
    double temp = 0;
    double count = 0;
    double halfpi = 1;


        while(true) {
          temp = b;
          b = temp + 2;
          denom = temp*b;

          a += 2;
          num = a*a; 

          halfpi *= (num/denom);
          count++;

          System.out.println(halfpi*2);                    
        }    
    }
}

问题是因为您混合了 INT 和双打。您的代码不会产生任何错误,因为这种类型的乘法很好,但是当您分配整数然后尝试将它们分配回双精度值时,您将丢失除小数点前的整数值之外的所有内容。

double pi = 0;
double a = 0;
double b = 1;
double denom = 0;
double num = 0;
double temp = 0;
double count = 0;
double halfpi = 1;

整数限制了获取所有小数点的能力,因此修复它应该可行。此外,使用此程序,您将 运行 非常快地从堆 space 中取出。就说