x2=2200−200,0=0: sbagliata del 100% (la vera radice è 0,005).
Il discriminante ha perso le sue ultime cifre nell'arrotondamento, e la differenza tra due numeri quasi uguali (200 e 39996=199,990) azzera tutto quello che resta.
(b) Formula stabile
Per la relazione tra radici x1x2=ac=1 si ha x2=ax1c. Con x1=200,0:
x2=200,01=0,005000.
Errore relativo: 0,005000125∣0,005000−0,005000125∣≈2,5⋅10−5, cioè circa 4–5 cifre corrette, come per x1. La divisione non ha cancellazione, e l'errore di x1 si trasmette in modo relativo (una divisione non lo amplifica).
(c) Quale radice soffre
La cancellazione si ha quando ∣b∣≫∣ac∣, nella somma tra −b e ±b2−4ac≈±∣b∣: se i due termini hanno segno opposto si annullano. Per b<0 (come qui) è la radice con − (la piccola), per b>0 è quella con +. Si calcola quindi per prima la radice in cui i due termini hanno lo stesso segno:
x1=2a−b−sgn(b)b2−4ac,x2=ax1c.
(d) Doppia precisione
Con b=−108, c=1: b2−4=1016−4 è un numero di macchina (vicino a 1016 il passo è 2) e la sua radice vale 108−2⋅10−8 circa. Vicino a 108 il passo tra numeri di macchina è 1,49⋅10−8, quindi la radice è arrotondata a 108−1,49⋅10−8 (un solo passo sotto 108). Allora
formula standard: x2=2108−(108−1,49⋅10−8)=7,45⋅10−9 invece di 10−8: errore del 25% (la differenza è esatta, ma il suo unico dato è l'ultimo bit della radice);
formula stabile: x1=2108+⋅=108 e x2=1/108=10−8 (corretto fino all'ultima cifra).
Risultato. Formula standard: x2=0 (sbagliata); formula stabile: x2=0,005000 con errore relativo 2,5⋅10−5.
Errori tipici
Pensare che il problema dipenda dal calcolatore: è la formula a essere instabile, non l'equazione (le due radici sono ben condizionate).
Usare la relazione x1x2=c/a prima di aver calcolato x1 con la formula giusta (cioè senza cancellazione).
Versione ripasso
Esatte: 100±9999, cioè 199,995000 e 0,005000125.
(a) Formula standard con 4 cifre: b2−4ac=39996→4,000⋅104, 40000=200,0; x1=2200+200,0=200,0 (errore 2,5⋅10−5), x2=2200−200,0=0 (errore 100%).
(b)x1x2=ac: x2=200,01=0,005000, errore relativo 2,5⋅10−5 (la divisione non amplifica).
(c) Cancella la radice in cui −b e ±⋅ hanno segno opposto: la piccola. Si usa x1=2a−b−sgn(b)b2−4ac e x2=ax1c.
(d)x2−108x+1=0 in doppia: formula standard x2=7,45⋅10−9 (errore 25%), formula stabile 10−8.
Errori tipici: incolpare l'equazione (le radici sono ben condizionate: è la formula a essere instabile); usare c/(ax1) con un x1 già calcolato con cancellazione.