
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
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
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