Underflow aritmetico
# Underflow aritmetico

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 5 cifre significative. Il numero 3,1415 verrebbe rappresentato nel seguente modo:

Ovvero come 31415 × $10^{−4}$

Il numero 125.250 verrebbe invece rappresentato come:

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

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

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.

