Historical Note

This page was migrated from the original p-nand-q.com site which was last updated in 2015. The content has been preserved exactly as it was, with only formatting updated for modern browsers. Over the coming days and weeks, the content will be reviewed and may be updated for accuracy and relevance. If you find any issues, please contact me.

Calculating pi to an arbitrary number of digits

Here is a really usefull helper class that you can use to calculate PI to an arbitrary number of (string) digits: sourcecode download. Note that you do need the JDK 1.5 for it.

import java.util.*;

public class pi
{    
    public int execute(int... args)
    {
        o [] oo = {
            new o() { public void _() {
                execute(21,9,15,17,9,16,20,9,28,9,26);
            } }, new o() { public void _() {
                execute(21,9,15,17,9,16,20,17,9,29,9,25,20,9,28,17,
                9,15,17,9,25,16,37,9,23,9,15,17,9,28,9,25,22,9,18,30,
                28,9,23,12,17,9,12,17,9,15,17,9,28,9,25,22,9,18,30,
                15,17,9,28,9,25,22,9,18,25,18,29,9,23,15,17,9,21,9,
                16,29,17,9,26);
            } }, new o() { public void _() {
                execute(14,9,31,9,23,22,17,9,22,9,16,22,9,23);
            } },  new o() { public void _() {
                s.append(O[1]);
            } }, new o() { public void _() {
                execute();
            } }, new o() { public void _() {
                execute(9,9,18,28,9,23,22,9,32,9,23,
                24,31,17,9,22,9,23,27,17,9,
                28,17,9,29,9,30,16,31,9,23,
                28,17,9,28,17,9,29,9,30,29,
                9,25,18,27,9,23,12,9,28,9,
                31,17,9,29,9,18,20,9,11,15,
                9,12,9,14,17,9,11,14,17,9,
                22,9,16,19,9,23);
            } }, new o() { public void _() {
                execute(14,17,9,10,17,9,18);
            } }, new o() { public void _() {
                execute(5,13);
            } }, new o() { public void _() {
                execute(32,17,33,15,17,9,22,9,18,20,9,15,9,23,34);
            } }, new o() { public void _() {
                O[42+1+O[42]++] = O[11];
            } }, new o() { public void _() {
                execute(12,9,15,9,16,20);
            } }, new o() { public void _() {
                execute(20);
                O[11] = (O[11] == 0) ? execute(20,33,20) : execute(20,20,33);
            } }, new o() { public void _() {
                execute(28,9,9,16,20);
            } }, new o() { public void _() {
                execute(10,9,12,9,6,11);
            } }, new o() { public void _() {
                execute(10,17,9,9,18,20);
            } }, new o() { public void _() {
                execute(12,9,22,9,18,20);
            } }, new o() { public void _() {
                execute(38,39,9);
            } }, new o() { public void _() {
                O[11] = O[O[11]];
            } }, new o() { public void _() {
                execute(38,40,9);
            } }, new o() { public void _() {
                execute(10,17,9,9,18,20);
            } }, new o() { public void _() {
                O[11] = O[42+1+--O[42]];
            } }, new o() { public void _() {
                O[11] = execute();
            } }, new o() { public void _() {
                execute(21,9,9,30,20);
            } }, new o() { public void _() {
                execute(20);
                O[10] = O[11];
                execute(20);
                O[O[10]] = O[11];
            } }, new o() { public void _() {
                execute(10,17,9,29,9,25,15,9,30,9,15,9,23,34);
            } }, new o() { public void _() {
                execute(38,41,9);
            } }, new o() { public void _() {
                execute(20);
                O[10] = O[11];
                execute(20);
                O[O[11]] = O[10];
            } }, new o() { public void _() {
                execute(12,9,22,9,16,20);
            } }, new o() { public void _() {
                execute(22,9,9,16,20);
            } }, new o() { public void _() {
                execute(12,9,22,9,16,28,9,25,20);
            } }, new o() { public void _() {
                execute(38,42,9);
            } }, new o() { public void _() {
                execute(12,9,28,9,16,20);
            } }, new o() { public void _() {
                execute(15,9,15,9,25,20);
            } }, new o() { public void _() {
                execute(O[11]);
            } }, new o() { public void _() {
                execute(35,9,12,9,36,9,11);
            } }, new o() { public void _() {
                execute(12,9,9,16,20);
            } }, new o() { public void _() {
                execute(15,17);
            } }, new o() { public void _() {
                execute(28,9,9,16,20);
            } }, new o() { public void _() {
                execute(20);
                O[8] = O[11];
                execute(20);
            } }, new o() { public void _() {
                O[11] += O[8];
            } }, new o() { public void _() {
                O[11] -= O[8];
            } }, new o() { public void _() {
                O[11] *= O[8];
            } }, new o() { public void _() {
                O[11] /= O[8];
            } }, new o() { public void _() {
                execute(24,14,9,9,26,13);
            } },
        };        
        for (int o : args) oo[o]._(); return 1860;
    }

    int [] O = null;
    interface o { void _(); }
    StringBuffer s = null;
    public pi(int n)
    {
        O = new int[n*execute()];
        O[7] = n+2;
        s = new StringBuffer();
        execute(43);
    }
    
    public static void main(String[] args)
    { 
        // example: calculate 20 digits of pi
        System.out.println(new pi(20).s);
    } 
}