Underflow aritmetico

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:F Un elaboratore presenta un underflow aritmetico nel caso in cui un'operazione aritmetica che utilizza variabili floating point generi un risultato più piccolo della sensibilità dell'elaboratore stesso. Ad esempio dividendo un numero a (diverso da zero) per un valore b molto grande si ottiene un valore c molto piccolo; se c è troppo piccolo la macchina non riesce a memorizzarlo correttamente e confonde il suo valore con zero.

Analisi del problema

Dato che le variabili floating point hanno una dimensione predefinita della mantissa, non è possibile memorizzarvi più di un determinato numero di cifre e in caso di sfondamento viene incrementato l'esponente. Ipotizzando una mantissa con cinque cifre significative. Il numero 3,1415 verrebbe rappresentato nel seguente modo:

MANTISSA    ESPONENTE
a b c d e   
3 1 4 1 5   - 4

Ovvero come Template:M

Il numero Template:M verrebbe invece rappresentato come:

MANTISSA    ESPONENTE
a b c d e   
1 2 5 2 5   1

Sommando i due numeri, a causa della ridotta dimensione della mantissa (e portando i numeri allo stesso esponente) otteniamo il seguente allineamento:

MANTISSA                
a b c d e x x x x x
1 2 5 2 5          
          3 1 4 1 5
--------------------
1 2 5 2 5 - - - - -

Disponendo solo di cinque cifre sulla mantissa, l'intero numero 3,1415 andrebbe perduto nella somma, causando un errore numerico che può propagarsi sensibilmente in caso di successive moltiplicazioni.

Contromisure e possibili soluzioni

Nei programmi si può, in certi casi, ovviare all'underflow aumentando la precisione di calcolo, passando da singola precisione (Template:M) a doppia (Template:M) o quadrupla (Template:M).

Durante l'analisi funzionale del programma è, inoltre, appropriato evitare di effettuare moltiplicazioni dopo la somma di numeri grandi con piccoli. I numeri grandi andrebbero divisi e i piccoli moltiplicati, tenendo ovviamente conto del processo numerico che si intende applicare.

Voci correlate

Collegamenti esterni

Template:Portale