Extraction de racine carrée
En algorithmique et en analyse numérique, l'extraction de racine carrée est le processus qui consiste, étant donné un nombre, à en calculer la racine carrée. Il existe de nombreuses méthodes pour effectuer ce calcul. C'est un cas particulier de la recherche de calcul de la racine n-ième.

Contexte 
La racine carrée d'un nombre pouvant être un nombre irrationnel, l'extraction de racine carrée est en général approchée.

Définitions 
L'extraction de la racine carrée d'un nombre  est identique à la résolution de l'équation . Les méthodes générales de résolution d'équations polynomiales, et plus généralement les algorithmes de recherche d'un zéro d'une fonction s'appliquent donc. On utilise les mêmes outils pour mesurer les performances des méthodes.

Lorsque l'on ne donne pas de précision supplémentaire, l'extraction de racine carrée se fait dans l'ensemble des nombres réels. On peut cependant s'intéresser à d'autres ensembles de nombres tels que les nombres complexes ou encore les anneaux tels que ℤ/nℤ.

Méthodes dans le cas des nombres réels positifs

Méthode de Héron 
La méthode de Héron est une méthode historique développée par les Babyloniens. En termes plus modernes, c'est un cas particulier de la méthode de Newton.

Pour déterminer la racine carrée du nombre (positif) , il convient dès lors de considérer la suite définie par récurrence de la façon suivante :

de premier terme  choisi si possible « assez proche » de , en général la partie entière de .

La vitesse de convergence des approximations successives vers la valeur exacte est quadratique.

Méthode du manuscrit de Bakshali 

On trouve dans un manuscrit indien, dit manuscrit de Bakshali, datant peut-être du , une correction différente de la méthode de Héron, la nouvelle valeur approchée étant . Elle est équivalente à appliquer deux fois de suite la méthode de Héron. L'itération de cette dernière méthode donne une vitesse de convergence bi-quadratique :

Approximation de  à l'aide de suites adjacentes 

Considérons les suites  et  définies par :
 ,
  est la moyenne harmonique de  et ,
  est la moyenne arithmétique de  et .
Les suites  et  sont adjacentes, et convergent vers la même limite : . L'erreur est majorée par la différence . La suite  n'est autre que la suite obtenue en itérant la méthode de Héron à partir de la valeur .

Remarquons l'originalité de cette présentation qui mêle moyennes harmonique, géométrique et arithmétique. En effet,  n'est autre que la moyenne géométrique de  et de , et si l'on remplace  par un réel strictement positif quelconque , les suites  et  convergent vers la moyenne géométrique  de  et .

Algorithmes utilisant la notation décimale

Algorithme de la potence 

L'introduction de la notation décimale des nombres par position a permis de développer un algorithme tirant parti de cette notation. On en trouve mention dans un ouvrage du mathématicien indien Âryabhata, vers 499  Il a été utilisé pendant plusieurs siècles et jusqu'au milieu du , avant l'invention des calculateurs électroniques. Âryabhata donne également un algorithme comparable permettant de calculer des racines cubiques.

On sépare les chiffres du nombre par paires en commençant à partir de la virgule. On place le nombre dont on veut extraire la racine en haut, de la même façon que lorsqu'on effectue une division selon la méthode classique ; la racine carrée sera inscrite à la place réservée normalement au diviseur dans une division posée classique.

À chaque étape :

 on abaisse la paire de chiffres la plus significative non encore utilisée et on la place au côté d’un reste éventuel de l'étape précédente (initialement nul) ;
 soit  le résultat intermédiaire de la racine carrée obtenu précédemment (égal à zéro au début). On cherche le plus grand chiffre  tel que le nombre  ne dépasse pas le reste courant ;
 on complète  en plaçant la décimale  à sa droite, pour former le nouveau résultat intermédiaire ;
 on soustrait  de la valeur courante pour former le nouveau reste ;
 si le reste est nul et qu’il n’y a plus de chiffre à abaisser alors l’algorithme se termine sinon on recommence.

(nota : la suite des chiffres constituant la racine s'inscrit au fur et à mesure à la place dévolue au diviseur dans une division classique, et donne le résultat : 12,34. La place de la virgule est significative mais n'a pas besoin d'être prise en compte pendant les calculs, il suffit de la constater à la fin)

Jusqu’au  on utilisait couramment cet algorithme en accélérant les calculs à l’aide d’un abaque formé d’un jeu de réglettes : les bâtons de Napier.

Bien que décrite ici pour des nombres écrits en base 10, la procédure fonctionne dans n’importe quelle base de numération, par exemple la base 2.

Méthode de Ruffini-Horner 
On pose le problème comme la détermination de la racine positive du polynôme . Soit  le plus grand entier tel que  soit négatif ou nul. La racine de  est un réel compris entre  et . On pose alors , dont on déduit . La racine carrée de  est alors égale à  où  est racine du polynôme .

Si  est le plus grand entier tel que  est négatif, la racine de  est alors comprise entre  et . On pose alors , d'où , puis on procède par récurrence.

La méthode de Ruffini-Horner permet d'effectuer facilement les changements de variables.

On part de . Le calcul donne .

Le changement de variable  dans le polynôme  s'effectue selon la méthode de Horner :

Donc

Le plus grand entier  tel que  soit négatif est 3 (on cherche une valeur proche de 827/240). La racine cherchée est donc comprise entre 12,3 et 12,4

On effectue le changement de variable  dans le polynôme 

Donc

Or 4 est une racine de . Donc la racine carrée de 152,2756 est 12,34

Extraction par sommes d'impairs successifs 
Cette méthode enseignée parfois au  a l'avantage de se résumer à une série d'additions (au maximum 9 pour chaque décimale cherchée) d'impairs consécutifs.

Elle consiste à exploiter la table des carrés successifs et de leur différence, en remarquant que, pour tout entier , . Balayer la table des carrés consiste donc à ajouter des impairs successifs. Après avoir découpé le nombre en tranches de deux chiffres en commençant par la droite, on recherche le carré immédiatement inférieur au groupe le plus à gauche. Soit , la racine carrée de ce carré immédiatement inférieur. On multiple l'entier  trouvé par 10 et on balaie la table des carrés à partir de  (et ) pour s'approcher du nombre formé des deux groupes les plus à gauche. Ce nombre  étant trouvé, on le multiplie par 10 pour parcourir la table des carrés à partir de , etc.

La racine carrée  donnera à un facteur 100 près la racine carrée recherchée. On découpe ce nombre en tranche de 2 chiffres : 1 52 27 56. Le carré le plus proche du premier groupe est 1.

On parcourt alors la table des carrés à partir de 10 pour approcher 152

Ajouter 25 conduirait à dépasser 152. On passe donc à la dizaine suivante en parcourant la table des carrés à partir de 120 pour approcher 15227.

Ajouter 247 conduirait à dépasser 15227. On passe donc à la dizaine suivante en parcourant la table des carrés à partir de 1230 pour approcher 1522756.

1522756 est donc le carré de 1234 et 152,2756 est celui de 12,34

C'est ce même principe qui est utilisé dans l'extraction de racine carrée par la méthode du goutte à goutte.

On peut raccourcir l'exécution de l'algorithme : avant de balayer la table des carrés à partir de , la facile calculabilité des carrés d'entiers se terminant par 5 peut permettre, dans certains cas, de s'affranchir de cinq additions en testant si , soit , reste aussi inférieure (ou pas) au nombre dont on cherche la racine. Si c'est le cas, il vaut mieux poursuivre l'algorithme à partir de  que de .

Par exemple, on cherche l'arrondi au dixième près de la racine carrée de 4700. Pour respecter cette précision, on est amené à chercher la racine de . Il suffira alors de diviser la racine finale par .

Comme , on a . Mais 47 étant plus proche de 49 que de 36,  sera plus proche de 7 que de 6.

Au lieu de commencer à balayer à  et , on peut, dans ce cas, initier le processus à  : . On a bien, comme prévu, 4225 < 4700.

L'algorithme (détaillé dans l'exemple ci-dessus) amène, petit à petit, à  auquel on ajoute , d'où  qui est plus proche de 470000 que . On en déduit :  au dixième près.

Extraction par additions et soustractions 

Cette méthode très simple a la particularité de n'utiliser que des opérations très simples : addition, soustraction et ajout de 0. Considérons les suites  et  définies par :
 ,
 Si  alors  et 
 Sinon,  (ce qui revient à rajouter deux zéros à la fin de ) et  (ce qui revient à insérer un zéro juste avant le dernier chiffre de  car cette dernière termine toujours par un 5)

Ainsi, les chiffres de  approchent de plus en plus les chiffres de . À noter que  reste un entier (de plus en plus grand) donc ce n'est pas  qui tend vers  mais seulement ses chiffres dans sa représentation décimale.

, 

Si, au lieu de prendre , on en prend des troncatures par tranches de deux chiffres et, au lieu d'ajouter à  deux zéros, on abaisse les tranches suivantes, on aboutit à la variante par 5 de la méthode par goutte à goutte.

Méthode par les fractions continues 

La fraction continue d'un irrationnel est la suite de ses approximations « optimales » par des fractions, c'est-à-dire que si p/q est une des valeurs de cette suite, alors aucune fraction de a/b avec b < q n'approche plus précisément le réel. Dans le cas particulier des racines carrées, on calcule relativement simplement cette suite, ainsi qu'une sous-suite qui correspond à un cas particulier de la méthode de Héron.

Méthode par dichotomie 
On peut également procéder par dichotomie à condition de disposer d'un encadrement de la racine carrée cherchée. On peut pour cela utiliser le nombre de chiffres du nombre dont on cherche la racine carrée. Cette racine aurait moitié moins de chiffres. Ainsi, si le nombre possède  chiffres, sa racine carrée en possèdera entre 511 et 513. On peut également utiliser d'abord les méthodes précédentes pour obtenir une première valeur approchée de la racine carrée avant de procéder à la dichotomie.

L'algorithme de dichotomie est le suivant. Il évite de procéder à des divisions (autre que la division par 2 qui n'est qu'un décalage de registre si les nombres sont codés en binaire. Cette division est notée shr 1 ci-dessous).
function Racine_64(C: int64): int64;
var
 A, B, D, D2: int64;
begin
  A := borne basse;
  B := borne haute;
  repeat
    D := (A + B) shr 1;
    D2 := D * D; ⇐ on élève au carré avant de tester
    if D2 > C then        
      A := D - 1
    else
      if C > D2 then
        B := D + 1
      else
        Result := A;
  until B > A;
end;

La même méthode s'applique pour les racines n-ièmes, en remplaçant le calcul de D2 = D*D par le calcul de D^n.

La méthode de dichotomie a cependant une vitesse de convergence plus lente que l'itération de la méthode de Héron.

Méthode informatique par décalage des bits
Le code ci-dessous présente un algorithme en C qui extrait la racine carrée d'un nombre entier positif en exécutant des décalages de bits :

// retourne le nombre qui doit être multiplié par lui-même pour atteindre num.
unsigned racine_carree(const unsigned num) {
    unsigned a = 0, b = num, c, d;
    for (c = 1 << 30 ; c; c >>= 2) {
        d = a + c;
        a >>= 1;
        if (b >= d)
            b -= d, a += c;
    }
    // la variable b contient le reste.
    return a;
}

Dans d'autres ensembles de nombres

Nombres complexes 

La racine carrée d'un nombre complexe  sera un nombre complexe  tel que :

En posant , le carré du module de , on peut établir une formule générale :

Le calcul revient donc à extraire trois racines carrées : le calcul de , puis les racines carrées de  et .

Anneaux ℤ/nℤ 
On cherche à résoudre l'équation . On distingue alors trois cas:
  est un nombre premier (par exemple 19) ;
  est une puissance de nombre premier (par exemple 81 = 34) ;
  est un nombre composé (par exemple 35 = 5×7).

S'il existe une solution, c'est-à-dire si  est un résidu quadratique modulo , on dispose d'algorithmes efficaces pour la trouver dans les deux premiers cas. Si  est un nombre composé, on ne dispose à l'heure actuelle d'un algorithme efficace que si la factorisation de  est connue. De plus on peut montrer que s'il existait un algorithme efficace pour calculer une racine carrée sans disposer de la factorisation de , cet algorithme pourrait être utilisé pour obtenir un algorithme efficace de factorisation. On ne pourra donc pas calculer efficacement de racines carrées modulo  tant que l'on ne pourra pas factoriser efficacement n'importe quel entier et réciproquement.

Notes et références

Notes

Références 

Racine carrée
Analyse numérique
Algorithme numérique
Algorithme de recherche d'un zéro d'une fonction
Technique de calcul
En algorithmique et en analyse numérique , l' extraction de racine carrée est le processus qui consiste , étant donné un nombre , à en calculer la racine carrée . Il existe de nombreuses méthodes pour effectuer ce calcul . C' est un cas particulier de la recherche de calcul de la racine n- ième . Contexte La racine carrée d' un nombre pouvant être un nombre irrationnel , l' extraction de racine carrée est en général approchée . Définitions L' extraction de la racine carrée d' un nombre est identique à la résolution de l' équation \ . Les méthodes générales de résolution d' équations polynomiales , et plus généralement les algorithmes de recherche d' un zéro d' une fonction s' appliquent donc . On utilise les mêmes outils pour mesurer les performances de les méthodes . Lorsque l' on ne donne pas de précision supplémentaire , l' extraction de racine carrée se fait dans l' ensemble de les nombres réels . On peut cependant s' intéresser à d' autres ensembles de nombres tels que les nombres complexes ou encore les anneaux tels que ℤ/ nℤ . Méthodes dans le cas de les nombres réels positifs Méthode de Héron La méthode de Héron est une méthode historique développée par les Babyloniens . En termes plus modernes , c' est un cas particulier de la méthode de Newton . Pour déterminer la racine carrée de le nombre ( positif ) , il convient dès lors de considérer la suite définie par récurrence de la façon suivante \ : de premier terme choisi si possible « assez proche » de , en général la partie entière de \ . La vitesse de convergence de les approximations successives vers la valeur exacte est quadratique . Méthode de le manuscrit de Bakshali On trouve dans un manuscrit indien , dit manuscrit de Bakshali , datant peut-être de le , une correction différente de la méthode de Héron , la nouvelle valeur approchée étant \ . Elle est équivalente à appliquer deux fois de suite la méthode de Héron . L' itération de cette dernière méthode donne une vitesse de convergence bi-quadratique \ : Approximation de à l' aide de suites adjacentes Considérons les suites et définies par \: , est la moyenne harmonique de et , est la moyenne arithmétique de et \ . Les suites et sont adjacentes , et convergent vers la même limite \ :\ . L' erreur est majorée par la différence \ . La suite n' est autre que la suite obtenue en itérant la méthode de Héron à partir de la valeur \ . Remarquons l' originalité de cette présentation qui mêle moyennes harmonique , géométrique et arithmétique . En effet , n' est autre que la moyenne géométrique de et de , et si l' on remplace par un réel strictement positif quelconque , les suites et convergent vers la moyenne géométrique de et \ . Algorithmes utilisant la notation décimale Algorithme de la potence L' introduction de la notation décimale de les nombres par position a permis de développer un algorithme tirant parti de cette notation . On en trouve mention dans un ouvrage de le mathématicien indien Âryabhata , vers Il a été utilisé pendant plusieurs siècles et jusqu' à le milieu de le , avant l' invention de les calculateurs électroniques . Âryabhata donne également un algorithme comparable permettant de calculer de les racines cubiques . On sépare les chiffres de le nombre par paires en commençant à partir de la virgule . On place le nombre dont on veut extraire la racine en haut , de la même façon que lorsqu' on effectue une division selon la méthode classique ; la racine carrée sera inscrite à la place réservée normalement à le diviseur dans une division posée classique . À chaque étape \ : on abaisse la paire de chiffres la plus significative non encore utilisée et on la place à le côté d’ un reste éventuel de l' étape précédente ( initialement nul ) ; soit le résultat intermédiaire de la racine carrée obtenu précédemment ( égal à zéro à le début ) . On cherche le plus grand chiffre tel que le nombre ne dépasse pas le reste courant ; on complète en plaçant la décimale à sa droite , pour former le nouveau résultat intermédiaire ; on soustrait de la valeur courante pour former le nouveau reste ; si le reste est nul et qu’ il n’ y a plus de chiffre à abaisser alors l’ algorithme se termine sinon on recommence . ( nota \ : la suite de les chiffres constituant la racine s' inscrit à le fur et à mesure à la place dévolue à le diviseur dans une division classique , et donne le résultat \ :34 . La place de la virgule est significative mais n' a pas besoin d' être prise en compte pendant les calculs , il suffit de la constater à la fin ) Jusqu’ à le on utilisait couramment cet algorithme en accélérant les calculs à l’ aide d’ un abaque formé d’ un jeu de réglettes \ : les bâtons de Napier . Bien que décrite ici pour de les nombres écrits en base la procédure fonctionne dans n’ importe quelle base de numération , par exemple la base Méthode de Ruffini-Horner On pose le problème comme la détermination de la racine positive de le polynôme \ . Soit le plus grand entier tel que soit négatif ou nul . La racine de est un réel compris entre et \ . On pose alors , dont on déduit \ . La racine carrée de est alors égale à où est racine de le polynôme \ . Si est le plus grand entier tel que est négatif , la racine de est alors comprise entre et \ . On pose alors , d' où , puis on procède par récurrence . La méthode de Ruffini-Horner permet d' effectuer facilement les changements de variables . On part de \ . Le calcul donne \ . Le changement de variable dans le polynôme s' effectue selon la méthode de Horner \ : Donc Le plus grand entier tel que soit négatif est ( on cherche une valeur proche de240 ) . La racine cherchée est donc comprise entre3 et4 On effectue le changement de variable dans le polynôme Donc Orest une racine de \ . Donc la racine carrée de2756 est34 Extraction par sommes d' impairs successifs Cette méthode enseignée parfois à le a l' avantage de se résumer à une série d' additions ( à le maximumpour chaque décimale cherchée ) d' impairs consécutifs . Elle consiste à exploiter la table de les carrés successifs et de leur différence , en remarquant que , pour tout entier , \ . Balayer la table de les carrés consiste donc à ajouter de les impairs successifs . Après avoir découpé le nombre en tranches de deux chiffres en commençant par la droite , on recherche le carré immédiatement inférieur à le groupe le plus à gauche . Soit , la racine carrée de ce carré immédiatement inférieur . On multiple l' entier trouvé paret on balaie la table de les carrés à partir de ( et ) pour s' approcher de le nombre formé de les deux groupes les plus à gauche . Ce nombre étant trouvé , on le multiplie parpour parcourir la table de les carrés à partir de , etc. La racine carrée donnera à un facteurprès la racine carrée recherchée . On découpe ce nombre en tranche dechiffres \ :52 27 56 . Le carré le plus proche de le premier groupe est On parcourt alors la table de les carrés à partir depour approcher Ajouterconduirait à dépasser On passe donc à la dizaine suivante en parcourant la table de les carrés à partir depour approcher Ajouterconduirait à dépasser On passe donc à la dizaine suivante en parcourant la table de les carrés à partir depour approcher 1522756 est donc le carré deet2756 est celui de34 C' est ce même principe qui est utilisé dans l' extraction de racine carrée par la méthode de le goutte à goutte . On peut raccourcir l' exécution de l' algorithme \ : avant de balayer la table de les carrés à partir de , la facile calculabilité de les carrés d' entiers se terminant parpeut permettre , dans certains cas , de s' affranchir de cinq additions en testant si , soit , reste aussi inférieure ( ou pas ) à le nombre dont on cherche la racine . Si c' est le cas , il vaut mieux poursuivre l' algorithme à partir de que de \ . Par exemple , on cherche l' arrondi à le dixième près de la racine carrée de Pour respecter cette précision , on est amené à chercher la racine de \ . Il suffira alors de diviser la racine finale par \ . Comme , on a \ . Maisétant plus proche deque de sera plus proche deque de À le lieu de commencer à balayer à et , on peut , dans ce cas , initier le processus à \: \ . On a bien , comme prévu , < L' algorithme ( détaillé dans l' exemple ci-dessus ) amène , petit à petit , à à lequel on ajoute , d' où qui est plus proche deque \ . On en déduit \ : à le dixième près . Extraction par additions et soustractions Cette méthode très simple a la particularité de n' utiliser que de les opérations très simples \ : addition , soustraction et ajout de Considérons les suites et définies par \: , Si alors et Sinon , ( ce qui revient à rajouter deux zéros à la fin de ) et ( ce qui revient à insérer un zéro juste avant le dernier chiffre de car cette dernière termine toujours par un Ainsi , les chiffres de approchent de plus en plus les chiffres de \ . À noter que reste un entier ( de plus en plus grand ) donc ce n' est pas qui tend vers mais seulement ses chiffres dans sa représentation décimale . Si , à le lieu de prendre , on en prend de les troncatures par tranches de deux chiffres et , à le lieu d' ajouter à deux zéros , on abaisse les tranches suivantes , on aboutit à la variante parde la méthode par goutte à goutte . Méthode par les fractions continues La fraction continue d' un irrationnel est la suite de ses approximations « optimales » par de les fractions , c'est-à-dire que si p/ q est une de les valeurs de cette suite , alors aucune fraction de a / b avec b < q n' approche plus précisément le réel . Dans le cas particulier de les racines carrées , on calcule relativement simplement cette suite , ainsi qu' une sous-suite qui correspond à un cas particulier de la méthode de Héron . Méthode par dichotomie On peut également procéder par dichotomie à condition de disposer d' un encadrement de la racine carrée cherchée . On peut pour cela utiliser le nombre de chiffres de le nombre dont on cherche la racine carrée . Cette racine aurait moitié moins de chiffres . Ainsi , si le nombre possède chiffres , sa racine carrée en possèdera entreet On peut également utiliser d' abord les méthodes précédentes pour obtenir une première valeur approchée de la racine carrée avant de procéder à la dichotomie . L' algorithme de dichotomie est le suivant . Il évite de procéder à de les divisions ( autre que la division parqui n' est qu' un décalage de registre si les nombres sont codés en binaire . Cette division est notée shrci-dessous ) . function Racine_64 ( C: int64 ) : int64 ; var A , B , D , D2: int64 ; begin A \:= borne basse ; B \:= borne haute ; repeat D \: = ( A + B ) shr D2 \ := D * D; ⇐ on élève à le carré avant de tester if D2 > C then A \: = D - 1 else if C > D2 then B \: = D + 1 else Result \ := A; until B > A; end ; La même méthode s' applique pour les racines n- ièmes , en remplaçant le calcul de D2 = D*D par le calcul de D^n . La méthode de dichotomie a cependant une vitesse de convergence plus lente que l' itération de la méthode de Héron . Méthode informatique par décalage de les bits Le code ci-dessous présente un algorithme en C qui extrait la racine carrée d' un nombre entier positif en exécutant de les décalages de bits \ : / / retourne le nombre qui doit être multiplié par lui-même pour atteindre num . unsigned racine_carree ( const unsigned num ) { unsigned a = b = num , c , d; for ( c = <<; c; c >>={ d = a + c; a >> = if ( b > = d ) b - = d , a += c; } / / la variable b contient le reste . return a ; } Dans d' autres ensembles de nombres Nombres complexes La racine carrée d' un nombre complexe sera un nombre complexe tel que \ : En posant , le carré de le module de , on peut établir une formule générale \ : Le calcul revient donc à extraire trois racines carrées \ : le calcul de , puis les racines carrées de et \ . Anneaux ℤ/ nℤ On cherche à résoudre l' équation \ . On distingue alors trois cas : est un nombre premier ( par exemple ; est une puissance de nombre premier ( par exemple =; est un nombre composé ( par exemple=7 ) . S' il existe une solution , c'est-à-dire si est un résidu quadratique modulo , on dispose d' algorithmes efficaces pour la trouver dans les deux premiers cas . Si est un nombre composé , on ne dispose à l' heure actuelle d' un algorithme efficace que si la factorisation de est connue . De plus on peut montrer que s' il existait un algorithme efficace pour calculer une racine carrée sans disposer de la factorisation de , cet algorithme pourrait être utilisé pour obtenir un algorithme efficace de factorisation . On ne pourra donc pas calculer efficacement de racines carrées modulo tant que l' on ne pourra pas factoriser efficacement n' importe quel entier et réciproquement . Notes et références Notes Références Racine carrée Analyse numérique Algorithme numérique Algorithme de recherche d' un zéro d' une fonction Technique de calcul