Underflow aritmetico

Da Wikipedia, l'enciclopedia libera.

Un elaboratore presenta un underflow aritmetico nel caso in cui una 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[modifica | modifica wikitesto]

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 5 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 31415 × 10-4

Il numero 125.250 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 - - - - -

Ovviamente, disponendo solo di 5 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[modifica | modifica wikitesto]

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

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[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica