Per qualche giorno è stata la notizia più curiosa del web, diventando addirittura una nuova catena di Sant’Antonio. Si tratta del bug di Excel 2007 che porta a strani risultati nelle moltiplicazioni. Per esempio moltiplicando 850*77.1, che dovrebbe dare come risultato 65.535, si vedeva nella cella corrispondente un curioso 100.000.
Il team di Excel ha lavorato sodo per correggere l’errore, creando una patch disponibile per il download si dal 9 ottobre.
Indubbiamente mi ha colpito molto un bug nella funzionalità più basilare che si possa richiedere ad un foglio elettronico, dato che da tempo ci aspettiamo che un bug sia una falla nella sicurezza. Il bug è così peculiare che merita di essere approfondito, anche per chiarire che non si tratta di un errore nell’operazione matematica in sé, quanto nella sua rappresentazione. I risultati delle operazioni vengono conservati nella memoria in formato binario, ma qualcosa va storto quando Excel deve mostrarceli in una cella.
Per prima cosa va sottolineato che il bug non affligge il numero 65535. Digitiamolo in una cella, e lo vedremo visualizzato correttamente in tutto il suo splendore… Riguarda piuttosto i numero molto vicini a 65535.
La rappresentazione binaria di 77.1 è 0100 0000 0101 0011 0100 0110 0110 0110
0110 0110 0110 0110 0110 0110 0110 0110. Non male eh? Il problema si intuisce subito: la rappresentazione dei numeri decimali (dopo la virgola) non è naturale in formato binario (esattamente come 1/3 non ha una rappresentazione finita in base 10). In parole povere, in base 2 alcuni numeri che in base dieci hanno una rappresentazione limitata (es: 77.1), in base 2 è come se fossero periodici.
Ora, se 77.1 viene rappresentato come un numero molto simile ma non esattamente 77.1, è 77.1 x 850 avrà come risultato “quasi” 65535. Ovvero uno dei 12 numeri che scatena il putiferio.
Gli sviluppatori non hanno perso tempo a spiegare nei dettagli come funziona la faccenda, scrivendo un post interessante sull’argomento.
Un’ultima curiosità: Microsoft aderisce allo standard IEEE per i calcoli fatti in virgola mobile per Microsoft Excel. Lo fa da anni e la scelta è buona dal punto di vista della rapidità del calcolo dato che i processori ragionano in binario. Tuttavia la calcolatrice di Windows, che non ha bisogno di essere un giaguaro dei conti, è stata riscritta per evitare i problemi di arrotondamenti.