Calcolo della radice quadrata Con metodo della bisezione Rodolfo Pietrasanta matr
Il concetto matematico Calcolare la radice quadrata di un numero reale positivo n significa trovare l’insieme delle x tali che x 2 = n. Per numeri > 1, la bisezione consiste nel porsi due estremi all’interno dei quali la radice sarà sicuramente compresa (Es. : 1 < sqrt(n) < n ) e calcolarne il punto medio. Se il punto medio appartiene all’insieme citato sopra (quindi se elevandolo a quadrato fa n), allora è la radice. Altrimenti, uno dei nuovi estremi sarà il punto medio stesso, mentre il secondo rimarrà o il più grande, se il punto medio al quadrato è più piccolo di n, o il più piccolo, se il punto medio al quadrato è più grande di n, per poi ripetere il processo.
Per numeri compresi tra 0 e 1 il procedimento è analogo, tuttavia andranno considerati come estremi iniziali 0 e 1 invece che 1 ed n. Se n = 1 la radice è uguale ad uno, mentre se n = 0, la radice è 0. L’algoritmo trova le radici solo nel campo reale, bisogna escludere i casi n < 0.
Passo Significativo Il passo significativo è quindi quello di ridurre l’intervallo all’interno del quale sono certo che ci sia la radice fino a trovare un’approssimazione sufficientemente precisa. In molti casi ci saranno molte o addirittura infinite cifre decimali, per questo occorrerà fornire una tolleranza all’algoritmo.
Passo Significativo: formalizzazione Calcolo medio = (estremo1 + estremo2) /2 Casi possibili: medio * medio = numeroho finito, trovata radice medio * medio < numeroestremo1 medio medio * medio > numeroestremo2 medio Si devere ripetere il passo significativo finché non ho finito
Problema: L’uguaglianza medio 2 = numero potrebbe non raggiungersi mai. a = b significa a – b = 0 Ci si accontenta di |a – b| < dove è legato alla precisione della rappresentazione floating point (ad esempio, ).
leggi numero se numero < 0 stampa “errore: numero deve essere non negativo” altrimenti se numero < 1 estremo1 = 0 estremo2 = 1 altrimenti estremo1 = 1 estremo2 = numero
stop = FALSE finchè (NOT stop) medio = (estremo1 + estremo2) / 2 se(|numero – medio*medio| < tolleranza ) stop = TRUE; altrimenti se(medio * medio < numero), allora estremo1 = medio altrimenti estremo2 = medio stampa "radice di numero = “, medio
Nota finale: numero = 0 e numero = 1 sono trattati come tutti gli altri numeri (radice con la stessa precisione). Se si intende trattarli come numeri “speciali”, si possono inserire dei test (if) prima del ciclo.