为什么我得到 "NaN" 作为 Outprint`?
Why do I get "NaN" as Outprint`?
我想用 Java 计算圆周率。与 S. Ramanujan formel.
这是我的代码:
public class PiV5 {
public static void main(String[] args) {
int a = 4;
double pi = 0;
int b = 3;
int fakult = 3;
int x = 3;
long y = 1;
for (int i =1; i <= 50; i++) {
int n = i*4;
long fakultaet = 1;
long fakultae2 = 1;
int bh = i;
for (int g=1; g<=n; g++) {fakultaet = fakultaet * g;}
for (int l=1; l<=bh; l++) {fakultae2 = fakultae2 * l;}
pi = ((fakultaet * (1103 + (26390*i)))/Math.pow(fakultae2, 4) * Math.pow(396, 4*i));
};
System.out.println("Pi nach ein paar Rechnungen: " + (Math.sqrt(8)/9801)*pi);
}
}
感谢你的帮助,如果你能帮助我的话
正如 Andreas 在评论中提到的那样,此计算会导致数字溢出,因为即使对于长数据类型,值也会变大。
您现在可以使用您的算法执行的最大步骤是 5
,因为 20! = 2432902008176640000
、21! = -4249290049419214848
是由数字溢出引起的。
但即便如此,您的代码中还是有一点错误,因为您忘记了对循环中的值求和:
pi += ((fakultaet * (1103 + (26390 * i))) / Math.pow(fakultae2, 4) * Math.pow(396, 4 * i));
为了获得更好的准确性,还可以对常量值使用双精度值:
pi += ((fakultaet * (1103d + (26390d * i))) / Math.pow(fakultae2, 4) * Math.pow(396, 4 * i));
使用它进行 5 次迭代将产生以下结果:
Pi nach ein paar Rechnungen: 4.0513767058512194E63
这对 PI 来说不是一个很好的结果。
要改进它并获得更高的准确性,您可以使用 BigDecimal
class.
我想用 Java 计算圆周率。与 S. Ramanujan formel.
这是我的代码:
public class PiV5 {
public static void main(String[] args) {
int a = 4;
double pi = 0;
int b = 3;
int fakult = 3;
int x = 3;
long y = 1;
for (int i =1; i <= 50; i++) {
int n = i*4;
long fakultaet = 1;
long fakultae2 = 1;
int bh = i;
for (int g=1; g<=n; g++) {fakultaet = fakultaet * g;}
for (int l=1; l<=bh; l++) {fakultae2 = fakultae2 * l;}
pi = ((fakultaet * (1103 + (26390*i)))/Math.pow(fakultae2, 4) * Math.pow(396, 4*i));
};
System.out.println("Pi nach ein paar Rechnungen: " + (Math.sqrt(8)/9801)*pi);
}
}
感谢你的帮助,如果你能帮助我的话
正如 Andreas 在评论中提到的那样,此计算会导致数字溢出,因为即使对于长数据类型,值也会变大。
您现在可以使用您的算法执行的最大步骤是 5
,因为 20! = 2432902008176640000
、21! = -4249290049419214848
是由数字溢出引起的。
但即便如此,您的代码中还是有一点错误,因为您忘记了对循环中的值求和:
pi += ((fakultaet * (1103 + (26390 * i))) / Math.pow(fakultae2, 4) * Math.pow(396, 4 * i));
为了获得更好的准确性,还可以对常量值使用双精度值:
pi += ((fakultaet * (1103d + (26390d * i))) / Math.pow(fakultae2, 4) * Math.pow(396, 4 * i));
使用它进行 5 次迭代将产生以下结果:
Pi nach ein paar Rechnungen: 4.0513767058512194E63
这对 PI 来说不是一个很好的结果。
要改进它并获得更高的准确性,您可以使用 BigDecimal
class.