Somme pythagoricienne

En mathématiques la somme pythagoricienne de deux nombres a et b est le nombre a2+b2, que l'on peut voir comme la longueur de l'hypoténuse d'un triangle rectangle de côtés de longueurs a et b par le théorème de Pythagore. L'opération associée, l'addition pythagoricienne, est commutative et associative. La somme pythagoricienne peut être calculée efficacement sur machine par un algorithme donné par Moler et Morisson, qui s'avère être une application de la méthode de Halley.

Définition et propriétésModifier

Si on note ab = a2+b2, l'opération ainsi définie est commutative et associative, et :

a1a2 ⊕ … ⊕ an = a12 + a22 + … + an2.

Calcul numériqueModifier

La somme pythagoricienne des longueurs a et b des deux côtés de l'angle droit d'un triangle rectangle est la longueur de l'hypoténuse d'après le théorème de Pythagore. Le calcul de celle-ci donne la norme euclidienne en dimension 2, et plus généralement dans un espace de dimension quelconque. Elle permet ainsi de calculer le module d'un nombre complexe, ou de passer d'une représentation cartésienne à une représentation polaire.

Le calcul peut procèder par élévation au carré de a et b puis racine carrée de la somme, mais si a ou b prennent des valeurs très élevées, le calcul intermédiaire de a2 ou de b2 sur ordinateur peut créer une erreur de dépassement ou de soupassement.

Typiquement, le nombre le plus grand représentable en simple précision est de l'ordre de 3 × 1038 ; ainsi, si a ou b est supérieur à 2 × 1019, le logiciel déclarera le résultat « infini » (erreur de dépassement), même si le résultat final est représentable (par exemple si l'autre longueur est petite en valeur absolue) ; par exemple,  . Avec une représentation en double précision, le nombre le plus grand représentable est environ 1,8 × 10308, donc le résultat sera déclaré « infini » si a ou b est supérieur à 1,3 × 10154.

À l'inverse, la valeur absolue la plus petite représentable est environ 1,1 × 10−38 en simple précision et 2,2 × 10−308 en double précision. Ainsi, en simple précision, le calcul pour a = b = 2 × 10−38 donnera 0 (erreur de soupassement), alors que la valeur attendue est représentable et vaut environ 1,4 × 10−38.

La méthode de Moler et Morrison[1], une méthode itérative cubique (on gagne à peu près 3 chiffres significatifs à chaque itération), dérivée de la méthode de Halley[2], évite ce problème.

Cette méthode consiste en se ramenant d'abord à ab, puis à remplacer a et b, par deux nombres p et q positifs avec p > ab > q ayant même somme pythagoricienne, c'est-à-dire que a2+b2 = p2+q2. À chaque étape, l'algorithme diminue la valeur de q et augmente la valeur de p tout en conservant la somme pythagoricienne. Lorsque la valeur de q devient très petite, on a donc a2+b2p. Concrètement, l'algorithme s'écrit en pseudo-code :

fonction [résultat] = somme_pythagoricienne(a, b)

// initialisation
p ← max(|a|, |b|)
q ← min(|a|, |b|)

// Calcul
tant que (q a une valeur significative) faire
  r ← (q/p)^2
  s ← r/(4 + r)
  p ← p + 2*s*p
  q ← s*q
fin de boucle

résultat ← p

fin de fonction

Pour un calcul de norme euclidienne dans un espace de dimension supérieure à 2, il suffit de calculer la somme pythagoricienne de manière successive. Pour un vecteur X de dimension n :

fonction [résultat] = norme2(X)

// initialisation
n ← dimension(X)
s ← 0

// Calcul
pour i allant de 1 à n
  s ← somme_pythagoricienne(s, X(i))
fin de boucle

résultat ← s

fin de fonction

RéférencesModifier

BibliographieModifier

  • (en) Cleve Moler et Donald Morrison, « Replacing Square Roots by Pythagorean Sums », IBM Journal of Research and Development, vol. 27, no 6,‎ , p. 577–581 (DOI 10.1147/rd.276.0577, lire en ligne).
  • (en) Augustin A. Dubrulle, « A Class of Numerical Methods for the Computation of Pythagorean Sums », IBM Journal of Research and Development, vol. 27, no 6,‎ , p. 582–589 (DOI 10.1147/rd.276.0582, lire en ligne).