All pastes #1255955 Raw Edit

PiChudnovsky

public java v1 · immutable
#1255955 ·published 2008-11-14 06:59 UTC
rendered paste body
/** * * @author Jake Gunter */import org.apfloat.*;import java.util.*;import java.io.*;public class PiChudnovsky {    private String piCorrect;    public PiChudnovsky() throws IOException {        piCorrect = readPiFile();    }    public String readPiFile() throws IOException {        Scanner fin = new Scanner(new File("pi.txt"));        String piTmp = "";        while(fin.hasNext())             piTmp += fin.nextLine();        return piTmp;    }    public void validatePi(Apfloat pi) {        String piStr = pi.toString(true);        int smallerLen = piStr.length() < piCorrect.length() ? piStr.length() : piCorrect.length();        int digitsCorrect = 0;        String userPiCorrect = "";        boolean stillGoing = true;        for(int i=0;i<smallerLen && stillGoing;i++) {            char correct = piCorrect.charAt(i);            char user = piStr.charAt(i);            if (correct == user) {                digitsCorrect++;                userPiCorrect += user;            }            else stillGoing = false;        }        System.out.println(digitsCorrect-2 + " digits correct:");        System.out.println(userPiCorrect);    }    public static Apfloat factorial(Apfloat num) {        if (num.compareTo(new Apfloat(0)) == 0) return Apfloat.ONE;        Apfloat factorialized = num;        for(Apfloat i=num;i.compareTo(new Apfloat(0))>0;i=i.subtract(new Apfloat(1))) {            Apfloat x = i.compareTo(new Apfloat(1)) == 0 ? new Apfloat(0) : new Apfloat(1);            factorialized = factorialized.multiply(i.subtract(x));        }        return factorialized;    }    public static Apfloat inverse(Apfloat num) {        return new Apfloat(1).divide(num);    }    public static Apfloat negpow(Apfloat a, Apfloat b) {        if(b.mod(new Apfloat(2)).intValue() == 0) {            return ApfloatMath.pow(a.negate(),b);        }        else return ApfloatMath.pow(a.negate(), b).negate();    }    public static void main(String[] args) throws IOException {        long precision = 1000;        Apfloat pi = new Apfloat(0,precision);        Apfloat x = new Apfloat(0,precision);        Apfloat y = new Apfloat(0,precision);        Apfloat z = new Apfloat(0,precision);        Apfloat a = new Apfloat(0,precision);        Apfloat b = new Apfloat(0,precision);        Apfloat c = new Apfloat(0,precision);        Apfloat b1 = new Apfloat(1,precision);        Apfloat b12 = new Apfloat(12,precision);        Apfloat bn1 = new Apfloat(-1,precision);        Apfloat b6 = new Apfloat(6,precision);        Apfloat b13591409 = new Apfloat(13591409,precision);        Apfloat b545140134 = new Apfloat(545140134,precision);        Apfloat b3 = new Apfloat(3,precision);        Apfloat b640320 = new Apfloat(640320,precision);        for(Apfloat i=new Apfloat(0,precision);i.compareTo(new Apfloat(10,precision))<0;i=i.add(new Apfloat(1))) {             a = negpow(bn1,i);             b = factorial((b6.multiply(i)));             c = b13591409.add(b545140134.multiply(i));             x = a.multiply(b.multiply(c));             a = factorial(b3.multiply(i));             b = ApfloatMath.pow(factorial(i),3);             c = new Apfloat(3.0/2.0,precision).add(new Apfloat(3,precision).multiply(i));             y = a.multiply(b).multiply(ApfloatMath.pow(new Apfloat(640320,precision),c));             pi = pi.add(x.divide(y));             System.out.println(i.toString(true));        }        pi = pi.multiply(new Apfloat(12,precision));        pi = inverse(pi);        new PiChudnovsky().validatePi(pi);    }}