Extracteur de racine carrée

Extraction de racine carrée

L'extraction de racine carrée est relativement peu fréquente. Cependant elle intervient dans les distances euclidiennes et dans les moindres carrés. L'extraction s'apparente à la division et tout ce que l'on sait de la division rapide s'applique à la racine carrée. Souvent le même opérateur rapide exécute soit la division, soit l'extraction de racine carrée, les collisions étant trop rares pour justifier deux opérateurs par ailleurs coûteux.

Algorithme d'extraction de racine carrée

Dans le dessin ci-dessous, la surface de chaque rectangle rouge représente le poids de un bit. Seuls les bits à '1' sont dessinés. La surface totale dessinée est donc la somme pondérée de ces bits.
Le jeu consiste à trouver un carré de surface égale à un nombre donné, nombre dont la valeur est représentée par la surface d'un cercle bleu, en observant un bit de test ( £ ou > ) et en cliquant des bits. Le côté de ce carré est alors la racine cherchée.
Cliquer sur les objets dévoile leur surface.

Extracteur de racine carrée

On veut calculer Q = ÖA. Ceci est équivalent à Q = A ÷ Q. Donc si Q s'écrit sur n bits, A s'écrit avec 2n bits. A la différence de la division, l'extraction de racine est sans débordement.
On va construire une suite Qn, Qn-1, ... Q2, Q1, Q0 et une suite R2n, R2n-2, ... R4, R2, R0 telles que l'invariant A = Qj × Qj + R2j soit respecté pour tout j.

La récurrence est :

  • Qj-1 = Qj + qj-1* 2j-1                                  ( simple concaténation )
  • R2j-2 = R2j qj-1* 2j-1 * ( 2 * Qj + qj-1* 2j-1)   ( soustraction conditionnelle )

avec comme conditions initiales :

  • Qn = 0
  • R2n = A.

Quand la récurrence se termine, on a Q = Q0 = Sj qj * 2j. R = R0 est le reste de l'extraction de racine.
Si on remplace les fausses additions "+" par des concaténations, notées "&", la récurrence devient:

  • Qj-1 = Qj & qj-1
  • R2j-2 = R2j qj-1* 2j * ( Qj & 0 1 )       ( soustraction conditionnelle )

Extracteur avec restauration

L'extracteur de racine carrée avec restauration utilise les mêmes cellules de soustracteur conditionnel "SC" que le diviseur avec restauration.

  • si R2j ³ ( Qj & 0 1 ) alors { qj-1 = '1' ; R2j-2 = R2j ( Qj & 0 1 ) } //soustraction
  • si R2j < ( Qj & 0 1 ) alors { qj-1 = '0' ; R2j-2 = R2j} // identité
  Certaines cellules de ce circuit ont des entrées constantes ( '0' ou '1' ) ou une sortie non connectée. Elles ne sont pas simplifiées ici comme dans le diviseur avec restauration.

Extracteur sans restauration

L'extracteur de racine carrée sans restauration utilise les mêmes cellules d'addition/soustraction "AS" que le diviseur sans restauration.

  • si R2j ³ 0 alors { qj-1 = '1' ; R2j-2 = R2j ( Qj & 0 1 ) } //soustraction
  • si R2j < 0 alors { qj-1 = '-1' ; R2j-2 = R2j + ( Qj & 11 ) } // addition

En fait les valeurs des Qj successifs sont impaires, c'est à dire terminés à droite par un '1' implicite, qui ne sera explicité qu'à la conversion finale. Après quelques distributions de signe :

  • si qj-1 = '1' alors R2j-2 = R2j ( Qj+1 & ( 1 0 0 + 0 0 1 ) ) //soustraction
  • si qj-1 = '-1' alors R2j-2 = R2j + ( Qj+1 & ( 1 0 0 0 0 1 ) ) // addition
  Comme la racine Q est positive, son bit pois fort qn vaut toujours '1'. Cet extrateur donne toujours une racine Q impaire. Si le reste final R est négatif (bit de signe = 1), alors Q est trop grand et il est facile de le diminuer car il est impair.
L'intérêt de ces deux extracteurs est de montrer que l'on peut utiliser des chiffres valant '0', '1' ou '-1' (notation "BS") .