Underflow aritmetico
Questa voce o sezione sull'argomento terminologia informatica non cita le fonti necessarie o quelle presenti sono insufficienti.
|
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 problemaModifica
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 soluzioniModifica
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 correlateModifica
Collegamenti esterniModifica
- (EN) Approfondimento [collegamento interrotto], su mathworks.co.uk.