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("%10f %10f %10f"
          %(passo, y, y2))

    if(abs(x - y2) < ER):
        break
    elif(y2 > x):
        y     -= passo
        passo /= 10
  1.000000   2.000000   4.000000
  1.000000   3.000000   9.000000
  1.000000   4.000000  16.000000
  0.100000   3.100000   9.610000
  0.100000   3.200000  10.240000
  0.010000   3.110000   9.672100
  0.010000   3.120000   9.734400
  0.010000   3.130000   9.796900
  0.010000   3.140000   9.859600
  0.010000   3.150000   9.922500
  0.010000   3.160000   9.985600
  0.010000   3.170000  10.048900
  0.001000   3.161000   9.991921

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("%10f %10f"
          %(y, y2))

    if(abs(x-y2) < ER):
        break
    elif(y2 < x):
        yMin = y
    elif(y2 > x):
        yMax = y
  5.500000  30.250000
  3.250000  10.562500
  2.125000   4.515625
  2.687500   7.222656
  2.968750   8.813477
  3.109375   9.668213
  3.179688  10.110413
  3.144531   9.888077
  3.162109   9.998936