我试图用Chudnovsky算法编写一个计算pi
的程序(在Java中),但是它有输出NaN(不是数字)请帮助我找出代码中的错误,或改进代码。(我不太懂Java编程)
你可以在这里找到丘德诺夫斯基的算法:
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/2不是0.5。
你用整数来计算120!对于任何基元类型都是完全不受限制的。
f01,f02,f03应该在每个循环中初始化,否则它们会变得更大
修理它不是小事。你可以看看
Error calculating pi using the Chudnovsky algorithm - Java
和
http://www.craig-wood.com/nick/articles/pi-chudnovsky/
对于某些提示,但不要期望内置基元类型与该算法一起工作。
关于java - Chudnovsky算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36059550/