Java 用gregory级数计算带极限的近似pi

Java 用gregory级数计算带极限的近似pi,java,pi,approximation,Java,Pi,Approximation,以下是我试图解决的问题: 编写一个使用Gregory级数计算pi值的程序。程序的输入将是一个称为limit的十进制值。程序应通过对序列项求和来计算pi值,但仅在求和项的值小于或等于极限值时,程序才终止求和。因此,与总和相加的序列的最后一项是其值小于或等于极限值的第一项。 然后,程序打印出该点pi的计算值,以及计算得出的实际项数 以下是输出的外观: Input Limit: 0.005 Calculated Value of PI: 3.1659792728432157 No. of Terms

以下是我试图解决的问题:

编写一个使用Gregory级数计算pi值的程序。程序的输入将是一个称为limit的十进制值。程序应通过对序列项求和来计算pi值,但仅在求和项的值小于或等于极限值时,程序才终止求和。因此,与总和相加的序列的最后一项是其值小于或等于极限值的第一项。 然后,程序打印出该点pi的计算值,以及计算得出的实际项数

以下是输出的外观:

Input Limit: 0.005

Calculated Value of PI: 3.1659792728432157
No. of Terms Summed: 41
我的代码:

class Scratch {
    public static void main(String[] args) {

        int k = 1;
        double pi = 0.0;
        for (int term = 1; term < 50000; term++){
            double currVal = 0.0;
            if (term % 2 == 0) {
                currVal = (double) -4 / k;
            } else {
                currVal = (double) 4 / k;
            }

            pi = pi + currVal;
            if(((double)4/k) < 0.005){
                System.out.println(pi);
                System.out.println(term);
                break;
            }
            k = k + 2;

        }

    } 
 }

请让我知道我哪里出错了?非常感谢您的建议。

我尝试了您的代码,得到了预期的输出。您的代码使用的输入限制为0.05,这将导致预期的输出。但是,您说您从代码中得到的输出是输入限制为0.005时得到的。@Francisaskquestion对不起,我把0.05改为0.005。我不确定问题的给定输入是否不正确或我的代码是否不正确。请注意,您可以只编写
4.0
,而不是所有的双重强制转换
(double)4
。而
k=k+2
可以写成
k+=2
,与
pi
相同。工作正常。但是为什么不使用while循环呢?速度稍微快一点,并且不受迭代次数的限制,可以得到非常好的pi近似值。
3.144086415298761
401