Aritmetica in virgola mobile, errori, condizionamento e stabilità
Lo standard IEEE 754 e la precisione di macchina, cancellazione numerica con esempi, numero di condizionamento, algoritmi stabili e instabili.
Il calcolo numerico studia come risolvere al computer i problemi della matematica (equazioni, sistemi, integrali, equazioni differenziali) quando una formula esatta non c’è o è inutilizzabile. Il primo passo è capire con che cosa calcola un computer: non con i numeri reali, ma con un insieme finito di numeri in virgola mobile. Da qui nascono gli errori di arrotondamento, e la differenza tra un problema ben condizionato e un algoritmo stabile.
I numeri in virgola mobile
Un computer rappresenta un numero reale come
![]()
con un segno, una mantissa di
cifre binarie e un esponente
in un intervallo limitato. Lo standard IEEE 754, usato da tutti i processori moderni, prevede:
| Formato | Bit totali | Mantissa | Esponente | Cifre decimali | Precisione di macchina |
|---|---|---|---|---|---|
| singola (float) | 32 | 23 + 1 | 8 | circa 7 | |
| doppia (double) | 64 | 52 + 1 | 11 | circa 16 |
Il bit iniziale della mantissa è sempre 1 e non si memorizza (“bit nascosto”), da cui il “+ 1”.

La precisione di macchina
è la distanza tra 1 e il numero rappresentabile successivo. Ogni numero reale
nell’intervallo rappresentabile viene arrotondato al più vicino, con un errore relativo al massimo
:
![]()
E ogni operazione aritmetica ha lo stesso errore:
.
Sorprese tipiche.
non è rappresentabile esattamente in binario (come
in decimale), quindi
in doppia precisione dà
. Mai confrontare numeri in virgola mobile con l’uguaglianza esatta: si usa
.- In singola precisione
: oltre
gli interi non sono più tutti rappresentabili. - Esistono valori speciali:
(per esempio
) e NaN, “non un numero” (per esempio
), che si propagano nei calcoli invece di fermare il programma.
La cancellazione numerica
La sottrazione di due numeri quasi uguali è l’operazione più pericolosa. Se
e
hanno 16 cifre corrette e coincidono nelle prime 12, la differenza ne ha solo 4: le altre sono rumore di arrotondamento.
Esempio: l’equazione di secondo grado.
ha radici circa
e
. La formula classica per la radice piccola,
, sottrae due numeri quasi uguali e in doppia precisione dà circa
: errore del 25%. La soluzione è riscrivere la formula: si calcola prima la radice grande, senza cancellazione, e poi la piccola con
, cioè
, esatta.
Esempio:
per
piccolo. Con
,
arrotondato vale esattamente 1 e il risultato è 0, mentre il valore vero è
. Riscrivendo
il calcolo è accurato. Le librerie forniscono funzioni apposite, come expm1 e log1p, proprio per questi casi.
Condizionamento di un problema
Il condizionamento misura quanto il risultato esatto di un problema cambia se si perturbano un po’ i dati. Per una funzione
, il numero di condizionamento relativo è
![]()
l’errore relativo sul risultato è circa
volte quello sui dati. Se
è grande il problema è mal condizionato: anche un calcolo perfetto con dati arrotondati dà risultati inaffidabili. È una proprietà del problema, non dell’algoritmo.
Per i sistemi lineari
il numero di condizionamento è
. Se
, si perdono circa
cifre significative: con
in doppia precisione restano solo 4 cifre affidabili. La matrice di Hilbert
di ordine 10 ha
: è l’esempio classico di sistema quasi irrisolvibile al computer pur essendo invertibile.
Stabilità di un algoritmo
Un algoritmo è stabile se non amplifica gli errori di arrotondamento più di quanto faccia già il problema. Lo stesso problema ben condizionato si può risolvere con un algoritmo stabile o instabile, come nell’esempio dell’equazione di secondo grado.
Esempio di algoritmo instabile. Gli integrali
soddisfano
, con
. Usando la ricorrenza in avanti, l’errore iniziale (dell’ordine di
) viene moltiplicato per
: con
,
, e il risultato è completamente sbagliato, anche negativo, mentre
è sempre tra 0 e 1. Usando la ricorrenza all’indietro,
, partendo da un valore qualsiasi per
grande, l’errore viene diviso per
a ogni passo e il risultato è accurato.
Una regola pratica
Errore finale
condizionamento
precisione di macchina, se l’algoritmo è stabile. Nelle lezioni successive, per ogni metodo, ci chiederemo tre cose: se converge, quanto velocemente, e se è stabile. Il famoso esempio storico del razzo Ariane 5, esploso nel 1996 per la conversione di un numero in virgola mobile a 64 bit in un intero a 16 bit che non poteva contenerlo, ricorda che questi dettagli non sono accademici.




