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 (diverso da zero) per un valore molto grande si ottiene un valore molto piccolo; se è 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 cinque cifre significative. Il numero 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 - - - - -
Disponendo solo di cinque cifre sulla mantissa, l'intero numero 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]- (EN) Denis Howe, underflow, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- (EN) Approfondimento [collegamento interrotto], su mathworks.co.uk.