Skip to content

Instantly share code, notes, and snippets.

@rice2007
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rice2007/9459d1f4de5884d613ee to your computer and use it in GitHub Desktop.
Save rice2007/9459d1f4de5884d613ee to your computer and use it in GitHub Desktop.
Monte Carlo Method for Calculating Pi
import math
import random
def coin_flip(flip_count):
total_in_circle = 0.0
for i in range(0, int(flip_count)):
x_coord = random.uniform(-1.0, 1.0)
y_coord = random.uniform(-1.0, 1.0)
if x_coord*x_coord + y_coord*y_coord <= 1:
total_in_circle += 1
experimental_pi = 4.0*total_in_circle/flip_count
return experimental_pi
def trial_average():
flip_count = 100.0
cumulative_pi = 0.0
TRIAL_COUNT = 1000
for j in range(0, 3):
for i in range(0, 1001):
# running total of pi
cumulative_pi += coin_flip(flip_count)
# prints only after the final trial
if i % 1000 == 0 and i > 0:
pi = cumulative_pi/(TRIAL_COUNT)
total_in_circle = pi*flip_count/4
proportion = total_in_circle/flip_count
p = pi/4
q = 1 - pi/4
print "Flip count: "+ str(flip_count)
print "Proportion inside unit cirle: " + str(proportion)
print "Computed pi: " + str(pi)
print "Expected number of successful trials (mu): " + str(pi*flip_count/4)
print "Expected stddev of successful trials (sigma): " + str(math.sqrt(flip_count*p*q)) + "\n"
# resets pi's total and increases amount of flips
cumulative_pi = 0.0
flip_count = flip_count*10
trial_average()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment