def f(x):
return 1.0/x
def brouncker(f,a,b,n):
s = min( f(a),f(b) )*(b-a)
H = [0,s]
for i in range(2,n+1):
for j in range(1,2**(i-1),2):
pas = 1.0*(b-a)/2**(i-1)
h = f(a+j*pas)
H.append(h)
H.sort(key = float)
k = 0
while h-H[k] > 0:
k = k+1
hmin = H[k-1]
s = s + pas*(h-hmin)
return s
print(brouncker(f,1,2,3))