Now, the ratio of the area between the circle and square can be given by,

Thus, we can estimate the value of pi as,

Now, I wrote a little script in Python which does just that. I also put in the value of pi to 10 decimal places and wrote out the error produced. Initially, I didn't take a circle of unit radius but that just produced too much error:

import math;

import random;

import sys;

#calculate the value of pi using probability

maxtries = float(sys.argv[1]);

radius = 1.0;

side = 2.0 * radius;

tries = 0.0;

hits = 0.0;

pi = 3.1415926536;

while (tries < maxtries):

tries = tries + 1;

#get a point within the square

rx = random.random()*side;

ry = random.random()*side;

#distance from center of circle

dist = math.sqrt(math.pow(rx - radius, 2.0) + math.pow(ry - radius, 2.0));

if (dist <= radius): hits = hits + 1;

#estimated value of pi

piest = (hits*4/tries);

print "Radius: %d, Tries: %d, Hits: %d, pi: %1.10f, Error:%1.10f\n" % (radius, tries, hits, piest, piest - pi);

My output looks something like:

~$ python pi.py 10.0

Radius: 1, Tries: 10, Hits: 6, pi: 2.4000000000, Error:-0.7415926536

~$ python pi.py 100.0

Radius: 1, Tries: 100, Hits: 83, pi: 3.3200000000, Error:0.1784073464

~$ python pi.py 1000.0

Radius: 1, Tries: 1000, Hits: 790, pi: 3.1600000000, Error:0.0184073464

~$ python pi.py 10000.0

Radius: 1, Tries: 10000, Hits: 7822, pi: 3.1288000000, Error:-0.0127926536

~$ python pi.py 100000.0

Radius: 1, Tries: 100000, Hits: 78591, pi: 3.1436400000, Error:0.0020473464

~$ python pi.py 1000000.0

Radius: 1, Tries: 1000000, Hits: 786368, pi: 3.1454720000, Error:0.0038793464

~$ python pi.py 10000000.0

Radius: 1, Tries: 10000000, Hits: 7853556, pi: 3.1414224000, Error:-0.0001702536

~$ python pi.py 100000000.0

Radius: 1, Tries: 100000000, Hits: 78539696, pi: 3.1415878400, Error:-0.0000048136

~$ python pi.py 1000000000.0

Radius: 1, Tries: 1000000000, Hits: 785382068, pi: 3.1415282720, Error:-0.0000643816

The last observation is the most interesting. It ran for a few hours on my machine but did absolutely nothing to improve the error. In fact, the error actually increased!