The current record is held by Yasumasa Kanada and Daisuke Takahashi from the University of Tokyo with 51 billion digits of pi (51,539,600,000 decimal digits to be precise).
There are essentially 3 different methods to calculate pi to many decimals.
One of the oldest is to use the power series expansion of atan(x) = x  x^3/3 + x^5/5  ... together with formulas like pi = 16*atan(1/5)  4*atan(1/239). This gives about 1.4 decimals per term.
A second is to use formulas coming from ArithmeticGeometric mean computations. A beautiful compendium of such formulas is given in the book pi and the AGM, (see references). They have the advantage of converging quadratically, i.e. you double the number of decimals per iteration. For instance, to obtain 1 000 000 decimals, around 20 iterations are sufficient. The disadvantage is that you need FFT type multiplication to get a reasonable speed, and this is not so easy to program.
A third one comes from the theory of complex multiplication of elliptic curves, and was discovered by S. Ramanujan. This gives a number of beautiful formulas, but the most useful was missed by Ramanujan and discovered by the Chudnovsky's. It is the following (slightly modified for ease of programming):
Set k_1 = 545140134; k_2 = 13591409; k_3 = 640320; k_4 = 100100025; k_5 = 327843840; k_6 = 53360;
Then pi = (k_6 sqrt(k_3))/(S), where
S = sum_(n = 0)^oo (1)^n ((6n)!(k_2 + nk_1))/(n!^3(3n)!(8k_4k_5)^n)
The great advantages of this formula are that
1) It converges linearly, but very fast (more than 14 decimal digits per term).
2) The way it is written, all operations to compute S can be programmed very simply. This is why the constant 8k_4k_5 appearing in the denominator has been written this way instead of 262537412640768000. This is how the Chudnovsky's have computed several billion decimals.
An interesting new method was recently proposed by David Bailey, Peter Borwein and Simon Plouffe. It can compute the Nth hexadecimal digit of Pi efficiently without the previous N1 digits. The method is based on the formula:
pi = sum_(i = 0)^oo (1 16^i) ((4 8i + 1)  (2 8i + 4)  (1 8i + 5)  (1 8i + 6))
in O(N) time and O(log N) space. (See references.)
The following 160 character C program, written by Dik T. Winter at CWI, computes pi to 800 decimal digits.
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;bc;)f[b++]=a/5;
for(;d=0,g=c*2;c=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a,
f[b]=d%g,d/=g,b;d*=b);}
SCJP
Visit my download page
The formula for working out the value of e looks fun.
e = 1/0! + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + 1/6! + ....
SCJP
Visit my download page
SCJP
Visit my download page
SCJP
Visit my download page
Dave Trower wrote:If you like this type of thing, you should check out Project Euler at http://projecteuler.net/
Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.
Keep Smiling Always — My life is smoother when running silent. paul
[FAQs] [Certification Guides] [The Linux Documentation Project]
SCJP
Visit my download page
I'm sure glad that he's gone. Now I can read this tiny ad in peace!
Java file APIs (DOC, XLS, PDF, and many more)
https://products.aspose.com/total/java
