Radice quadrata – Ricerche…

Vedi la discussione

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