def best_poitou_bound(n, S, y_start = 0.5):
y = y_start
y_step = y_start/2
D = poitou_bound(n, y, S)
while y_step > 10^(-6):
D_lower = poitou_bound(n, y - y_step, S)
D_upper = poitou_bound(n, y + y_step, S)
if D_lower > D:
D = D_lower
y = y - y_step
else:
D = D_upper
y = y + y_step
y_step /= 2
return D, y