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()