我的代码:如何在这种情况下使用Java的大十进制?
//Ramanujan's Method of Calculating Pi
public class Main {
private static final double a1 = 9801.0;
private static final double a2 = 1103.0;
private static final double a3 = 26390.0;
private static final double a4 = 396.0;
private static final int loops = 2;
private static double asum;
public static double factorial(double n) {
if(n==0) return 1;
return n * factorial(n-1);
}
public static void main(String []args) {
//The calculation
for(int i=0;i<=loops;i++) {
asum += ((2*Math.sqrt(2))/a1)*((factorial(4.0*i))*(a2 + (a3 * i)))/(((Math.pow(factorial(i),4.0)))*(Math.pow(a4,(4.0 *i))));
}
System.out.println(Math.pow(asum,-1));
}
}
我为穷人可读性抱歉,但我我的手机上的那一刻,所以很难编辑代码。我试图让我的程序使用ramanujans计算方法打印出Pi,但我只熟悉双打,并且尝试使用Big Decimal后,我仍然卡住。如何在这种情况下使用大数字?谢谢!
尝试:
import java.math.*;
//Ramanujan's Method of Calculating Pi
public class Main{
private static final BigDecimal a1 = new BigDecimal(9810);
private static final BigDecimal a2 = new BigDecimal(1103);
private static final BigDecimal a3 = new BigDecimal(26390.0);
private static final BigDecimal a4 = new BigDecimal(396.0);
private static final BigDecimal con1 = new BigDecimal(2*Math.sqrt(2));
private static final int loops = 2;
private static BigDecimal asum;
public static BigDecimal factorial(BigDecimal n){
if(n==n.ZERO) return n.ONE;
return n.multiply(factorial(n.subtract(n.ONE)));
}
public static BigDecimal calc1(int i){
BigDecimal ret = new BigDecimal((factorial(4*i));
return ret;
}
public static void main(String []args){
for(int i = 0;i <= loops;i++){
asum += (con1.divide(a1)).multiply(calc1(i)).multiply((a2 + (a3.multiply(i))).divide(((Math.pow(factorial(i),4.0))).multiply(Math.pow(a4,(4.0 *i))));
}
System.out.println(Math.pow(asum,-1));
}
}
我尝试使用我的变量asum作为一个大的小数,然后用大十进制的默认函数替换所有的操作 – BlurryZombie 2014-10-27 19:04:38
您可以发布该代码吗? – Mshnik 2014-10-27 19:05:10
我假设当你试图替换BigDecimal时,你遇到了问题。他们是什么? (是的,按照Mshnik的建议发布代码。) – 2014-10-27 19:08:33