Algorithme d'Héron
La racine carrée d'un nombre positif A est la solution de l'équation x2 = A.
Aujourd'hui tout le monde utilise la calculatrice
pour déterminer la racine carrée d'un nombre. On tape simplemement
le nombre, par exemple 7453, puis le symbole
, et sans tarder l'appareil donne le résultat 86,330759292. Dans
le temps on utilisait divers procédés pratiques ou même
les tables numériques. Pour un nombre comme celui de l'exemple,
c'était déjà un petit exploit que de trouver le nombre
à 0,001 près. Avec la règle de calcul la précision
laissait encore plus à désirer. Par contre, sous les contraintes
des moyens limités, l'esprit mathématique souffrait moins
qu'aujourd'hui. Les étudiants devaient connaître leurs règles,
bien savoir les appliquer et, ce qui est plus important, ils devaient comprendre
ce qu'ils exerçaient. Parfois il fallait de l'astuce pour arriver
au bon résultat, comme dans nos casse-tête.
Peut-être un élève intéressé désire-t-il connaître un des procédés de calcul qu'utilisent les calculatrices.
Le mathématicien grec Héron d'Alexandrie élabora l'algorithme suivant:
x0= 90 | q0= 7453 / 90 = 82,810 |
x1= (90+82,810)/2 = 86,405 | q1= 7453 / 86,405 = 86,256 |
x2= (86,405+86,256)/2 = 86,330 | q2= 7453 / 86,330 = 86,331 |
==> abs ( x2 - q2 ) < p |
{constants}
#define(P,2)
{variables}
#define(A,0)
#define(x,1)
#define(q,2)
#define(local_h,3)
{subroutines}
#define(SQRT,1)
{===================}
beginoftask(Main)
setvar(A,con,7453) {exemple}
gosub(SQRT)
endoftask()
{===================}
BeginOfSub(SQRT)
setvar(x,var,A)
{première valeur approchée x := A/2}
divvar(x,con,2)
setvar(local_h,con,10000)
{initialisation}
while(var,local_h,GT,con,P)
{faire l'itération d'Héron jusqu'à ce que local_h
<= P}
setvar(q,var,A)
{q = A/x}
Divvar(q,var,x)
setvar(local_h,var,q)
{local_h := abs(q-x)}
subvar(local_h,var,x)
absvar(local_h,var,local_h)
sumvar(x,var,q)
{nouvelle valeur de x := (x+q)/2}
divvar(x,con,2)
endwhile()
{le
résultat 86 se trouve maintenant dans la variable x}
EndOfSub()