Chi lavora nell’ambito scientifico lo sa bene: approssimare è pressoché necessario. Quella dell’approssimazione numerica è una pratica costante nelle discipline scientifiche (in particolare in quelle ingegneristiche) e consiste nell’arrotondamento di valori e risultati che altrimenti sarebbero troppo scomodi da gestire. Per semplificare modelli reali si usano svariate tipologie di approssimazione: dalle più leggere in cui si arrotonda qualche numero decimale, alle più radicali in cui addirittura si trascurano dati o variabili.
Per farci un’idea di cosa significhi approssimare prendiamo in considerazione il seguente problema:
Un golfista deve colpire una pallina posta ai suoi piedi. Con quale angolo è necessario colpire l’oggetto affinché la traiettoria percorsa dalla palla sia massima?
Il problema non presenta particolari difficoltà e anzi è probabile che la maggior parte di voi lo abbia risolto a scuola durante una delle lezioni di fisica. Spesso, quando si presentano problemi del genere, gli stessi libri di testo consigliano di trascurare l’attrito dell’aria (che complicherebbe di gran lunga i calcoli).
L’aria ha una bassa densità e per di più neanche la vediamo, quindi non ci sembra così folle accettare l’ipotesi semplificativa della sua omissione dal problema.
Facendo qualche calcolo e risolvendo un paio di equazioni si arriva al risultato (forse prevedibile) che il miglior angolo di tiro è quello a 45 gradi e che in queste condizioni, note la forza applicata dal golfista e le caratteristiche geometriche di una regolare pallina da golf, la palla riesca a percorrere circa 490 metri prima di toccare terra.
Tutto funziona su carta, ma ragionando a mente lucida, non sembra un po’ improbabile che un uomo medio riesca a far volare una palla per quasi mezzo chilometro?
L’approssimazione che trascura la resistenza dell’aria in questo caso è particolarmente significativa.
Se infatti ripetessimo i calcoli aggiungendo l’attrito generato dalla pallina immersa nel fluido e qualche sistema di equazioni differenziali, arriveremmo al ben più accettabile risultato di circa 220 metri.
Con questo semplice esempio abbiamo capito che le approssimazioni devono essere condotte con criterio, ma ci sono stati casi in cui delle sviste nella gestione di numeri e codici hanno prodotto effetti disastrosi.
Scrivere un codice significa generare un procedimento di calcolo che, affidato ad un elaboratore, semplifica di gran lunga il lavoro dell’uomo. Se però non si presta estrema attenzione alla creazione dei codici e alla rappresentazione numerica, le conseguenze possono essere irreparabili.
La distruzione della piattaforma Sleipner A
L’ incidente risale ai primi anni novanta e costò una perdita di circa 700 milioni di dollari.
Un uso incorretto del codice a elementi finiti NASTRAN portò ad una sottostima degli sforzi di taglio a cui veniva sottoposta la struttura del circa 50%. Questo significò da un punto di vista pratico che le pareti in cemento non risultarono abbastanza spesse da sopportare i carichi a cui vennero effettivamente sottoposte, con conseguente distruzione della piattaforma.
Lo scoppio in volo di Ariane 5
Il 5 giugno del 1996, il razzo Ariane 5 si distrusse in volo dopo neanche un minuto dal lancio a causa di un malfunzionamento del software di controllo disintegrando più di dieci anni di lavoro. La causa di uno dei bug più famosi della storia è una semplice conversione errata di bit: in particolare un dato a 64 bit venne convertito in un intero a 16 bit con segno generando un trap del processore che innescò una serie di reazioni a catena che portarono al comando di autodistruzione.
La tragedia del missile Patriot
Siamo ancora agli inizi degli anni novanta durante la Guerra del Golfo. Il missile Patriot aveva il compito di intercettare un missile iracheno ma fallì nel suo compito a causa di errori di arrotondamento.
Patriot usava un processore con aritmetica a 24 bit e il tempo era memorizzato al suo interno in unità di tempo campionate a dieci.
Il problema sorse dal momento in cui il tempo di campionamento venne rappresentato in base 2 generando una sequenza periodica del tipo: 0,0001100110011001100110011…
La memorizzazione delle prime 24 cifre portò ad un errore di circa 0,000000095 secondi.
Il dato non sembra particolarmente rilevante ma se lo si integra con le quasi cento ore di operatività del razzo e con la velocità che questo possiede, si arriva ad un errore in tempo di circa 0,3433 secondi e in spazio di circa 690 metri.
Il Patriot si ritrovò di fatto più di mezzo chilometro lontano dall’obbiettivo iracheno colpendo un bersaglio sensibile e costando la vita a 28 persone.
Questi esempi evidenziano come l’approssimazione numerica sia uno strumento particolarmente delicato da trattare e ci donano un grande insegnamento: che voi dobbiate lanciare una pallina da golf o mandare un satellite in orbita con un razzo, attenti alle virgole!