Il problema della perdita di significatività e la cancellazione catastrofica

Consideriamo due numeri, A e B, quasi uguali tra li loro. Per semplicità possiamo immaginare che la loro trascrizione all’interno delle stringhe di bit sia di questo tipo

A xxxxxxxxxxxx.xxxxxxxa B xxxxxxxxxxxx.xxxxxxxb

Come si osserva, i due numeri A e B differiscono solo per l’ultima cifra decimale e quindi, se calcolassimo la loro differenza il risultato ottenuto sarebbe qualcosa di questo tipo

A-B 0000000000.0000000c

Quello che si ottiene, quindi, è una notevole perdita di significatività poiché tutte le cifre che esprimevano la precisione di A e B sono diventate 0 ad eccezione dell’ultima cifra: siamo passati, dunque, da due numeri con una certa precisione ad un terzo valore con una potenza enorme e negativa. Una perdita così importante ottenuta in una sola operazione viene definita Catastrophic Cancellation. Questo tipo di errore si verifica anche nel calcolo della varianza o nella somma di due numeri molto diversi tra loro. Prendiamo in esame il secondo caso e consideriamo un numero molto grande, indicato con la lettera C, ed un altro molto piccolo, indicato con la lettera D

C xxxxxxxxxxxxxx.xxxx D x.xxxxxxxxxxxxxxx

A causa del diverso allineamento perderò tutta la precisione del numero più piccolo. Esistono alcuni algoritmi che introducono termini di correzione per preservare le cifre significative (l’algoritmo di Newmaier ne è un esempio).

Lascia un commento

Progetta un sito come questo con WordPress.com
Comincia ora