![]() ![]() |
On se propose ici de programmer, en JavaScript, l'algorithme de Théon de Smyrne pour le calcul de la racine carrée d'un nombre positif A :
En posant : xo = yo = 1, xn+1 = xn + yn , yn+1 = yn + 2xn et rn = yn/xn, la suite (rn) vérifie :
ro = 1 ,
et converge vers √A. En posant vn = r2n , on a prouvé (cliquer sur la clé...) que :
si 0 < A < 1, la suite (vn) converge en décroissant vers √A, l'erreur à chaque itération n'excédant pas :
si A > 1, la suite (vn) converge en croissant vers √A, l'erreur à chaque itération n'excédant pas :
Programmation de l'algorithme en JavaScript : |
<SCRIPT LANGUAGE=JavaScript> |
» fonctions mathématiques usuelles
➔ Si l'on est trop gourmand en précision, le programme va "planter" par dépassement de capacité dans le calcul de (A - 1)2n+1 dans le cas A >1. On détourne ici "provisoirement" la difficulté en évaluant non pas l'erreur mais son logarithme décimal.
En vertu de l'égalité log10(10k) = k, si l'utilisateur veut un calcul avec k décimales exactes, le logarithme décimal de l'erreur commise doit être inférieur à -(k + 1). Toutefois, xn et yn augmentant plus vite que (1 + A)n, au-delà de xn = 10300, le programme va également nous lâcher...
Exemple :
Si vous voulez calculer la racine carrée de 10224, calculer plutôt celle de 1.0224 et décalez la virgule (point décimal) de 2 rangs vers la droite !