Skip to content

Instantly share code, notes, and snippets.

@gbossert
Created July 21, 2016 14:14
Show Gist options
  • Save gbossert/f8c8245f16d0fbecd1acaea0e93f7bc2 to your computer and use it in GitHub Desktop.
Save gbossert/f8c8245f16d0fbecd1acaea0e93f7bc2 to your computer and use it in GitHub Desktop.
import time
def make_pi():
q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
for j in range(1000):
if 4 * q + r - t < m * t:
yield m
q, r, t, k, m, x = 10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t - 10*m, x
else:
q, r, t, k, m, x = q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2
def test1():
val = []
for i, x in enumerate(make_pi()):
val.append(x)
if i == 800:
return None
return val
def test2():
val = []
for i, x in enumerate(make_pi()):
val.append(x)
if i == 800:
raise Exception()
return val
def measure_exec_time(func, nb_iter=1000):
x = time.time()
for _ in xrange(nb_iter):
try:
v = func()
except:
pass
return (time.time() - x) /nb_iter
print "Preloading caches"
measure_exec_time(test1, nb_iter=1)
measure_exec_time(test2, nb_iter=1)
print "Measure exec time for return"
print measure_exec_time(test1)
print "Measure exec time for exceptions"
print measure_exec_time(test2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment