Chudnovsky算法

时间:2016-03-17 11:41:43

标签: java algorithm nan

我尝试制作一个程序(用Java编写),用Chudnovsky算法计算pi,但它有输出NaN(非数字)。请帮我找到代码中的错误,或者改进我的代码。 (我没有很多Java编程知识)

你可以在这里找到Chudnovsky的算法:

https://en.wikipedia.org/wiki/Chudnovsky_algorithm

这是我的代码:

package main;

public class Class1 {

    public static void main(String[] args)
    {
        double nr1=0,nr2=0,nr3=0,pi=0;
        int fo1=1, fo2=1, fo3=1;

        for(int i=0; i<=20; i++){

            for(int fl1=1; fl1<=(6*i); fl1++){fo1 = fo1 * fl1;}
            for(int fl2=1; fl2<=(3*i); fl2++){fo2 = fo2 * fl2;}
            for(int fl3=1; fl3<=(i); fl3++){fo3 = fo3 * fl3;}

            nr1 = ( (Math.pow(-1, i)) * (fo1) * ((545140134*i) + 13591409) );
            nr2 = ( (fo2) * (Math.pow(fo3, i)) * ( Math.pow(Math.pow(640320, 3), (i+(1/2)) )) );
            nr3 = 12 * (nr1/nr2);

        }

        pi = 1/nr3;
        System.out.println((Math.PI));
        System.out.println(pi);
    }
}

1 个答案:

答案 0 :(得分:3)

这里有很多问题。

  • 正如安迪所说,1/2不是0.5。
  • 您正在使用整数来计算120这样的东西!这完全超出任何原始类型的范围。
  • f01,f02,f03应该在每个循环内初始化,否则它们会变得更大

修复它并非易事。你可以看看 Error calculating pi using the Chudnovsky algorithm - Javahttp://www.craig-wood.com/nick/articles/pi-chudnovsky/ 对于某些提示,但不要期望内置的原始类型与该算法一起使用。