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); }}