Error computing pi using the Chudnovsky algorithm - Java

I am trying to write a simple program to calculate pi using the Chudnovsky algorithm, however I continue to get the wrong value output. The last code I wrote is below and outputs:

9.642715619298075837448823278218780086541162343253084414940204168864066834806498471622628399332216456e11

Can anyone tell me where I was wrong.

As Peter de Rivaz noted, I dropped the b value with a fixed output: -1.76779979383639157654764981441635890608880847407921749358841620214761790018058 3600120191582474909093e-2

Apfloat sum = new Apfloat(0); for(int k = 0; k < n; k++) { int thrk= 3*k; Apfloat a = ApintMath.factorial(6*k); //(6k)! * (-1)^k a = a.multiply(ApintMath.pow(new Apint(-1),k)); Apfloat b = new Apfloat(545140134); b = b.multiply(new Apfloat(k)); b = b.add(new Apfloat(13591409)); // 13591409 + 545140134k Apfloat c = ApintMath.factorial(thrk); // (3k!) Apfloat d = ApintMath.factorial(k); d = ApfloatMath.pow(d, 3); // (k!)^3 Apfloat e = new Apfloat(640320); e = ApfloatMath.pow(e,(thrk)); // (640320)^(3k) a = a.multiply(b); // a is know the numerator c = c.multiply(d).multiply(e); // c in know the denominator Apfloat div = a.divide(c.precision(digits)); sum = sum.add(div); } Apfloat f = new Apfloat(10005, digits);// Works out the constant sqrt part f = ApfloatMath.sqrt(f); f = f.divide(new Apfloat(42709344*100)); Apfloat pi = ApfloatMath.pow(sum.multiply(f), -1); System.out.println(pi); 
+6
source share
2 answers

The denominator for the Chudnovsky algorithm includes 640320 ^ (3k + 3/2) - you use only 640320 ^ (3k).

+2
source

PROBLEM 1

One problem is the line:

 b.add(new Apfloat(13591409)); 

this will add 13591409 to b and discard the result.

Try:

 b = b.add(new Apfloat(13591409)); 

PROBLEM 2

There is a problem in the line:

 f = f.divide(new Apfloat(42709344*100)); 

The problem is that the numbers in Java are 32-bit integers by default, so the overflow is 42709344 * 100.

Try:

 f = f.divide(new Apfloat(42709344*100L)); 
+5
source

All Articles