我的代碼:如何在這種情況下使用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