In matematica la somma di Pitagora di due numeri a e b è il numero √ un 2 + b 2 , che può essere visto come la lunghezza della dell'ipotenusa di un triangolo rettangolo di lati di lunghezza a e b dal teorema di Pitagora . L'operazione associata, l'aggiunta pitagorica, è commutativa e associativa . La somma pitagorica può essere calcolata in modo efficiente su una macchina da un algoritmo fornito da Moler e Morisson, che risulta essere un'applicazione del metodo di Halley .
Se indichiamo con a ⊕ b = √ a 2 + b 2 , l'operazione così definita è commutativa e associativa, e:
a 1 ⊕ a 2 ⊕… ⊕ a n = √ a 1 2 + a 2 2 +… + a n 2 .La somma delle lunghezze di Pitagora un e b su entrambi i lati del angolo retto di un triangolo rettangolo è la lunghezza dell'ipotenusa secondo il teorema di Pitagora . Il calcolo di questo dà la norma euclidea nella dimensione 2, e più in generale in uno spazio di qualsiasi dimensione . Permette così di calcolare il modulo di un numero complesso , o di passare da una rappresentazione cartesiana a una polare .
Il calcolo può procedere squadratura un e b allora la radice quadrata della somma, ma se una o b assumono valori molto grandi, il calcolo intermedio di un 2 o b 2 su un computer può creare un errore di overflow o cedimenti .
Tipicamente, il numero più grande rappresentabile in singola precisione è dell'ordine di 3 × 10 38 ; quindi, se una o b è maggiore di 2 × 10 19 , il software dichiarare il risultato (overflow) "infinito", anche se il risultato finale è rappresentabile (per esempio se l'altro tratto è piccola in valore assoluto); per esempio ,. Con doppia precisione la rappresentanza , il più grande numero rappresentabile è pari a circa 1,8 × 10.308 , quindi il risultato sarà dichiarato "infinito", se una o b è maggiore di 1.3 × 10.154 .
Al contrario, il valore assoluto più piccolo rappresentabile è circa 1,1 × 10 −38 in precisione singola e 2,2 × 10 −308 in doppia precisione. Pertanto, in precisione singola, il calcolo per a = b = 2 × 10 −38 darà 0 (errore di underflow), mentre il valore atteso è rappresentabile e vale circa 1,4 × 10 −38 .
Il metodo di Moler e Morrison, un metodo cubico iterativo (otteniamo circa 3 cifre significative ad ogni iterazione), derivato dal metodo di Halley, evita questo problema.
Questo metodo consiste nel ridurre primo a un ≥ b , quindi sostituendo un e b , da due positivi numeri p e q con p > un ≥ b > q avente la stessa somma di Pitagora, vale a dire che √ a 2 + b 2 = √ p 2 + q 2 . Ad ogni passo, l'algoritmo diminuisce il valore di q e aumenta il valore di p mantenendo la somma pitagorica. Quando il valore di q diventa molto piccolo, abbiamo quindi √ a 2 + b 2 ≈ p . In concreto, l'algoritmo è scritto in pseudo-codice:
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 fonctionPer un calcolo della norma euclidea in uno spazio di dimensione maggiore di 2, è sufficiente calcolare successivamente la somma pitagorica. Per un vettore X di dimensione 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