title: Somme pythagoricienne
text: # Somme pythagoricienne
  
  En mathématiques la somme pythagoricienne de deux nombres a et b est le nombre $√a^2+b^2,$ 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és
  
  Si on note a ⊕ b = $√a^2+b^2,$ l'opération ainsi définie est commutative et associative, et :
  
      $a_1$ ⊕ $a_2$ ⊕ … ⊕ $a_n$ = $√a_1^2$ + $a_2^2$ + … + $a_n^2.$
  
  ## Calcul numérique
  
  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 $a^2$ ou de $b^2$ 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 × $10^{38}$ ; ainsi, si a ou b est supérieur à 2 × $10^{19},$ 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, ${\sqrt {(2\times 10^{19})^{2}+1^{2}}}\simeq 2\times 10^{19}$. Avec une représentation en double précision, le nombre le plus grand représentable est environ 1,8 × $10^{308},$ donc le résultat sera déclaré « infini » si a ou b est supérieur à 1,3 × $10^{154}.$
  
  À 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, 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, évite ce problème.
  
  Cette méthode consiste en se ramenant d'abord à a ≥ b, puis à remplacer a et b, par deux nombres p et q positifs avec p > a ≥ b > q ayant même somme pythagoricienne, c'est-à-dire que $√a^2+b^2$ = $√p^2+q^2.$ À 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 $√a^2+b^2$ ≈ p. Concrètement, l'algorithme s'écrit en pseudo-code :
  
  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 :
  
  