La calcolatrice usa successioni basate su perfezionamenti del metodo di Newton (vedi Les Algorithmes, Bibliothèque Tangente 37, 2013, oppure Itération et Récurrence, Bibliothèque Tangente 76, 2021).
La funzione f utilizzata è definita da f (x) = x2 ‒ a.
Cerchiamo la soluzione di f (x) = 0, poiché la soluzione è proprio a\sqrt{a} la quantità che ci interessa. Implementiamo l’algoritmo.
La derivata di f è f ' (x) = 2 x, e si ha f(x)f′(x)=x2−a2x=x2−a2x.\dfrac{f(x)}{f'(x)} = \dfrac{x^2 -a}{2x} = \dfrac{x}{2} - \dfrac{a}{2x}.
Si ottiene così la successione di Erone:
un+1=un−f(un)f′(un)=un−un2+a2un=un2+a2un=12(un+aun).u_{n+1} = u_n - \dfrac{f(u_n)}{f'(u_n)} = u_n - \dfrac{u_n}{2} + \dfrac{a}{2u_n} =\dfrac{u_n}{2} + \dfrac{a}{2u_n} = \dfrac{1}{2} \left( u_n + \cfrac{a}{u_n} \right).
Illustriamo ora il metodo con a = 163. Per inizializzare i calcoli, si può partire da a, oppure, dato che 163 è compreso tra 144 = 122 e 169 = 132, da 12.
Dopo appena tre iterazioni dell’algoritmo, il risultato è sorprendente, poiché 163=12,7671453348037…\sqrt{163} = 12,7671453348037 \ldots
Infatti, il numero di cifre decimali esatte raddoppia (come minimo) a ogni ciclo: è il fenomeno della convergenza quadratica.
A ogni iterazione occorrono un’addizione, una divisione e una divisione per 2, facile da programmare in binario: in tutto, appena tre operazioni.
L’astuzia di Schönhage ---------------------
Il principale svantaggio dell’uso della successione di Erone (vedi sopra) è la presenza di una divisione: un’operazione «gravosa» e «lenta», persino per un circuito elettronico. Tuttavia, la divisione « a / *un » può essere sostituita da una successione: ancora una volta si usa il metodo di Newton per calcolare l’inverso 1/b di un numero reale b > 0. Questa volta si usa la funzione g definita da g(x)=1x−b,g(x) = \dfrac{1}{x}-b, che porta alla successione v definita da vn*+1 = *vn(2 ‒ bvn*).
Infatti: g(x)=1x−b,g(x) = \dfrac{1}{x}-b, e g′(x)=−1x2,g'(x) = \dfrac{-1}{x^2}, da cui g(x)g′(x)=1x−b−1x2=−x2(1x−b)=−x+bx2,\dfrac{g(x)}{g'(x)} = \dfrac{ \dfrac{1}{x}-b}{\dfrac{-1}{x^2}} = -x^2 \left( \cfrac{1}{x} -b\right) = -x +bx^2,
ossia vn+1=vn−g(un)g′(un)=vn+vn−bvn2=vn(2−bvn).v_{n+1} = v_n- \dfrac{g\left(u_n\right)}{g'\left(u_n \right)} = v_n +v_n -bv_n^2 = v_n \left( 2-bv_n \right).
Si può fare ancora meglio! Il matematico tedesco Arnold Schönhage (nato nel 1934) ebbe l’idea di accoppiare le due successioni del metodo di Newton; questo accoppiamento si rivelò più efficiente dell’uso separato dei due metodi. Per calcolare un valore approssimato della radice quadrata di a > 0, ripartiamo dalla successione u, definita da
un+1=12(un+aun)=un+a−un22un.u_{n+1} = \dfrac{1}{2} \left( u_n + \cfrac{a}{u_n} \right) = u_n + \dfrac{a-u_n^2}{2u_n}.
Per calcolare 12un,\dfrac{1}{2u_n}, si usa il metodo di Newton per calcolare gli inversi.
In questo contesto si usano due successioni, u e v:
{un+1=un+(a−un2)vn,\[0,7mm]vn+1=vn(2−2unvn)=vn+(1−2unvn)vn,\left \{ \begin{array}{l} u_{n+1} = u_n + \left( a-u_n^2\right) v_n, \[0,7mm] v_{n+1} = v_n (2-2u_nv_n) = v_n +(1-2u_nv_n)v_n, \end{array} \right. con v0=12u0.v_0= \dfrac{1}{2u_0}.