Ogni giorno ci si trova a dover approssimare un numero decimale. Tra i tanti casi, basti pensare ai prezzi dei prodotti quando si fa la spesa. Ma cosa succede quando ad approssimare è un computer?
Come è noto, i calcolatori elettronici lavorano in aritmetica finita: ovvero, non ammettono infiniti numeri “dopo la virgola”. Questo porta ad un’inevitabile approssimazione che nel migliore dei casi può essere “per arrotondamento” (come insegnano a fare da piccoli, cambiando la penultima cifra a seconda che l’ultima sia superiore o inferiore al numero 5) o, addirittura, “per troncamento” (tagliando completamente fuori dal calcolo le cifre in eccesso).
Diversi disastri nel mondo militare sono avvenuti proprio a causa di approssimazioni del calcolatore elettronico dovuti al fatto che alcuni numeri finiti in base 10 sono irrazionali nel sistema binario (sistema a base 2 utilizzato dai computer).
Due casi sono esemplari. Il primo, avvenuto il 25 febbraio del 1991, durante la Guerra del Golfo, riguarda un Missile PATRIOT di una batteria di Dhahran, in Arabia Saudita. Il suo compito era quello di intercettare un missile SCUD iracheno. L’impresa fallì e lo SCUD colpì una caserma americana causando la morte di 28 soldati e il ferimento di oltre 100 persone nella città di Dhahran. Per le stesse ragioni di mancata intercettazione, altri SCUD colpirono il territorio israeliano.
Un report del General Accounting office spiega che l’errore è stato dovuto essenzialmente al calcolo inaccurato del tempo a causa di errori di arrotondamento.
In particolare, il tempo, calcolato in decimi di secondo nel computer della batteria dei PATRIOT, veniva poi moltiplicato per 10 per ottenere un tempo in secondi. Questi calcoli furono eseguiti con un formato a virgola fissa con registri a 24 bit.
Ma il numero 0.1 che in base 10 è un numero finito, non ha una rappresentazione finita nel sistema binario e, di conseguenza, se troncato e poi moltiplicato per 10, finisce con il comportare l’insorgere di significativi errori. Il semplice troncamento produce in effetti un errore pari a circa 0.000000095. Se si aggiunge che la batteria è stata in funzione per circa 100 ore prima di far partire un missile per l’intercettazione dello SCUD, si conclude che al momento della intercettazione la batteria dei PATRIOT aveva un tempo errato di circa 0.34 secondi, piùù che sufficiente a far mancare il bersaglio (si tenga conto infatti che uno SCUD procede ad una velocità di crociera di circa 1676 metri al secondo, più che sufficiente dunque a garantirgli di uscire dalla finestra di intercettamento del PATRIOT.
I motivi dell fallimento furono dovuti alla concomitanza anche di altri fattori. Infatti, Il PATRIOT nacque come sistema anti-aereo e fu aggiornato in seguito a sistema anti-missile. L’errore del calcolo di tempo fu, di fatti, rimosso dal codice, ma non in tutte le parti. Altra causa fu il fatto che i test furono eseguiti per un tempo limitato di ore.
L’altro caso degno di nota riguarda un missile della classe Ariane 5 (progetto costato all’European Space Agency circa 7 miliardi di dollari). Il missile precipitò dopo soli 37 secondi dal lancio avvenuto nel poligono di Kourou nella Guiana francese. L’ammontare del danno fu di 500 milioni di dollari.
Il guasto alla base del fallimento, accertato dopo due settimane di indagini, fu dovuto ad una erronea conversione di un numero in formato floating-point a 64 bit (correlato alla velocitá orizzontale del razzo rispetto alla piattaforma) in un intero a 16 bit: il numero risultante, maggiore del massimo intero rappresentabile pari aa 32768, provocò un overflow nella misura della velocità orizzontale con il conseguente spegnimento dei razzi ed esplosione del missile.
In conclusione, ciò che a volte potrebbe sembrare un’operazione di routine, semplice e banale, in alcuni casi può portare a complicazioni e talvolta risultare fatale.