Ricerca sequenziale
…
x = 10
if(x < 1): y = 0
else: y = 1
passo = 0.1 * x
ER = 0.001 * x
while(True):
y += passo
y2 = y**2
print(passo, y, y2)
if(abs(x - y2) < ER):
break
elif(y2 > x):
y -= passo
passo /= 10
1.0 2.0 4.0
1.0 3.0 9.0
1.0 4.0 16.0
0.1 3.1 9.610000000000001
0.1 3.2 10.240000000000002
0.01 3.11 9.672099999999999
0.01 3.1199999999999997 9.734399999999997
0.01 3.1299999999999994 9.796899999999997
0.01 3.1399999999999992 9.859599999999995
0.01 3.149999999999999 9.922499999999994
0.01 3.159999999999999 9.985599999999993
0.01 3.1699999999999986 10.04889999999999
0.001 3.1609999999999987 9.991920999999993
Ricerca binaria
…
x = 10
if(x < 1):
yMin = 0
yMax = 1
else:
yMin = 1
yMax = x
ER = 0.001 * x
while(True):
y = (yMin+yMax)/2
y2 = y**2
print(y, y2)
if(abs(x-y2) < ER):
break
elif(y2 < x):
yMin = y
elif(y2 > x):
yMax = y
5.5 30.25
3.25 10.5625
2.125 4.515625
2.6875 7.22265625
2.96875 8.8134765625
3.109375 9.668212890625
3.1796875 10.11041259765625
3.14453125 9.888076782226562
3.162109375 9.99893569946289