Pannello di controllo del post:

Baco spettacolare in Excel?    26.9.07    80 commenti    Aggiungi un commento

Excel 2007 non sa fare i conti?

L'articolo è stato aggiornato dopo la pubblicazione iniziale.

Questa è talmente grossa che nonostante le prime apparenti conferme faccio davvero fatica a darla per buona. Secondo varie fonti, come The Inquirer e Slashdot, Microsoft Excel 2007 sbaglia una semplice moltiplicazione. Un difetto non da poco, considerato che lo scopo per il quale si usa uno spreadsheet è appunto fare calcoli. Chiedo quindi il vostro aiuto, visto che non dispongo di Excel 2007.

Provate a immettere in una cella il calcolo "=850*77.1". Il risultato giusto è 65535, ma Excel 2007 a quanto pare dice che è 100000 (OpenOffice.org fornisce il risultato corretto).

Provate anche altri calcoli che dovrebbero dare come risultato 65535:

=5.1*12850
=10.2*6425
=20.4*3212.5
=40.8*1606.25
=77.1*850
=154.2*425
=212.5*308.4
=308.4*212.5
=425*154.2


Segnalate i risultati dei vostri test nei commenti, anche con versioni di Excel differenti dalla 2007 e con altri programmi, e se trovate conferme del baco, mandatemi una schermata al solito indirizzo topone chiocciola pobox.com. Grazie!

Aggiornamento


Confermato. Ecco una delle tante schermate di Excel 2007 che mi avete mandato e per le quali vi ringrazio tutti (questa è quella di piefum: cliccatevi sopra per ingrandirla). Grazie anche per la segnalazione dello spiegone di Microsoft.

Microsoft dice che si tratta sostanzialmente di un mero errore di visualizzazione ("the issue is actually not in the calculation itself (the result of the calculation stored in Excel’s memory is correct), but only in the result that is shown in the sheet") e che è già in preparazione una correzione.

La giustificazione, tuttavia, non risponde a una domanda che non è tecnica ma credo venga spontanea: come mai un programma a pagamento, prodotto supportato da un'azienda che incassa utili per oltre 1 miliardo di dollari al mese, fa una cosa di questo genere, mentre programmi gratuiti e sviluppati dagli smanettoni (come Openoffice.org, Gnumeric e altri) non la fanno? Oppure ci sono altri bachi, magari meno spettacolari ma anche peggiori, nei programmi alternativi?


Invia un commento
Le critiche sono ben accette. Gli insulti, a me o ad altri, no. Regolatevi di conseguenza, se non volete che i vostri commenti vengano rimossi.
Gli URL molto lunghi sono inutilizzabili. Quindi se dovete includere degli URL molto lunghi, usate TinyUrl o servizi simili per convertirli in URL corti, oppure usate l'apposito tag HTML per inserire direttamente un link.
La moderazione dei commenti è sempre attiva per gli articoli più vecchi di 180 giorni. A volte, quando il clima si fa caldo o arrivano spammer, troll e simili, viene attivata la moderazione globale di tutti gli articoli.

Commenti (80)
GM ha commentato:
Excel 2003 su Win è OK.
Lorenza ha commentato:
Ho verificato al volo i primi su Excel 2007 il risultato e` davvero 100000! Problemi di rappresentazione/overflow? :-)
.gialla ha commentato:
Su Excel 2002 il risultato è correttamente 65535
Diego ha commentato:
Provato su due excel 2007 di due colleghi (io ho linux :-P): bug confermato.

La faccia dei colleghi: :-O
Andrea Occhi ha commentato:
non ho office 2007 (con 2003 non sbaglia). Per capire qual è il problema, bisognerebbe provare a riutilizzare il valore (tipo riprenderlo in un'altra cella aggiungendogli 1) e vedere se è un problema di calcolo o di visualizzazione....
Comunque grazie Microsoft!
Pippo ha commentato:
Non è che sia per il punto anziché la virgola? Inserendo la formula col punto Excel 2002 dà errore, bisogna sostituirlo con la virgola. Magari invece Excel 2007 riconosce in un altro modo la notazione col punto e fa calcoli differenti.
gporsini ha commentato:
Excel 2003 SP2 da il risultato corretto. Comunque invito all'uso di OpenOffice Calc che è equivalente ed in più è libero.
Lorenza ha commentato:
Ho provato a riferirmi al risultato e aggiungerci 1... 100001.

Paolo per lo snapshot spero te lo mandi qualcun altro... io in realta` sono in una macchina Solaris con rdesktop, gli strumenti unix che ci mettono a disposizione qui sono davvero limitatissimi.... l'immagine ottnenuta e` uno shifo :-(
marco[n] ha commentato:
purtroppo non ho Excel 2007. Sulla versione 2003 confermo anch'io che il risultato e' 65535.
Mas ha commentato:
Ciao Paolo ti ho appena inviato la schermata del bug.
Ora faccio le altre prove e ti faccio sapere
Francesco Sblendorio ha commentato:
Niente errori con questa versione:
Excel 2003 (11.8105.8107) SP2
Francesco Sblendorio ha commentato:
Sulla stessa scia, ma meno grave, potete fare quest'altra prova. I browser possono effettuare calcoli, tramite javascript, ad esempio digitando come indirizzo (Explorer o Firefox non importa):

javascript:2+3

Apparirà (giustamente) 5. Ma provate a effettuare una sottrazione come 3.2 - 3.1

javascript:3.2-3.1

Il risultato sarà diverso da quello che vi aspettate. Questo però si spiega, è dovuto alla rappresentazione binaria dei numeri floating point... ma il 65535 che diventa 100000 no! Oddio... traducendo 65535+1 in esadecimale risulta 10000, ma comunque manca uno zero e poi ho dovuto aggiungere 1...
silverrain ha commentato:
Excel 2000 sp3 --> 65535
Tutto ok
Mas ha commentato:
Ho eseguito tutte le moltiplicazioni da te proposte e il risultato è sempre lo stesso: 100000 !

Ho notato che se aggiungo 1 continua l’errore, se invece lo sottraggo il risultato è corretto: 65534
Se aggiungo 2 il risultato è corretto: 65537

Massimo
Sergio Gervasini ha commentato:
Provato su Excel XP/2002 SP3 e funziona correttamente.
scorp ha commentato:
65535 è un numero caro ai programmatori, è 2^16, ed è il numero massimo rappresentabile tramite un intero da 16 bits.
Mauro ha commentato:
Provate questo workaround: mettete l'operazione dentro una funzione.
Es. INT(850*77,1) invece di 850*77,1.
loste ha commentato:
Concordo con Scorp quello non è un "bug", è un regalo di uno sviluppatore che se ne è andato dalla MS. Vi ricordate il "simulatore di volo" sulla versione 97 ???
E' comunque solo un problema di visualizzazione ma se ci copia e incollavalore si consolida l'erroe.
Loste
Andrea Perotti ha commentato:
Qui la spiegazione:

http://blogs.msdn.com/excel/archive/2007/09/25/calculation-issue-update.aspx
Pyx ha commentato:
Su mac ovviamente tutto ok!!!!!
stefan ha commentato:
excel 2004 per mac funziona ... ma con la virgola al posto del punto....
Stefano ha commentato:
Procedura consigliata per risolvere il problema:
Start -> Impostazioni -> Pannello di controllo -> Rimuovi programmi -> Selezionare Office2007

Fatto ciò, scaricare l'ultima versione di Openoffice dal sito it.openoffice.org
Francesco Sblendorio ha commentato:
@scorp:

2^16 non è 65535.
2^16 è 65536.

65535 è il numero massimo rappresentabile tramite un intero senza segno con 16 bit.

Il numero massimo rappresentabile tramite un intero, con segno, è 32767.
Marco ha commentato:
ti volevo lasciare il trackback ma il tuo blog non espone il link.le ho provate tutte, ed è proprio come dici: http://blog.scano.net/software/baco-spettacolare-in-excel/ . ciao!
Paolo ha commentato:
bug confermato
xlthlx ha commentato:
confermo il baco sul 2007.
Mackley ha commentato:
Ho fatto un prova con Apple iWorks '08, l'applicazione "Numbers" e il risultato è corretto.

Anche nell'applicativo "Google Documenti" http://docs.google.com
la formula funziona senza problemi.
Francesco Sblendorio ha commentato:
la spiegazione di Microsoft segnalata da Andrea Perotti a me pare fumosa e vaga, dicendo che il problema è legato alla visualizzazione. C'è qualcuno che la pensa diversamente?
Claudio ha commentato:
...sul PC di una collega con il 2007: bug confermato. Sul mio, con il 2003 SP3, il risultato è 65535...
popski ha commentato:
Non ho office 2007. Funziona anche con =65535? Bisognerebbe a modificare il formato delle celle se e' un problema di visualizzazione.
Gandalf ha commentato:
proviamo a fare chiarezza...

provate a fare cosi': formattate la cella A1 come numero e nessun decimale dopo la virgola, quindi come valore inseriteci 45,73 x 21,54

Il valore effettivo e' 985,0242 ma viene visualizzato 985.

Ora se nella cella A2 (formattata come general) calcolate A1*2 ottenete correttamente 1970,048

Ecco, con Excel 2007 e' + o - la stessa cosa, ma dovuto ad un bug nell'algoritmo che trasforma il valore della cella nella sua rappresentazione
sirus ha commentato:
Office XP SP3 su Windows XP, Office 2003 su Windows Vista e Office:Mac 2004 su Mac OS X non hanno problemi.
Matteo ha commentato:
Anch'io sono concorde alla soluzione del regalino lasciato da un (ex) sviluppatore...lascia molto a desiderare l'ipotesi del bug di visualizzazione...anche da me con office 2007 lo fa. Anche l'ipotesi di overflow la scarto a priori, dato che si va benissimo oltre...
Francesco Sblendorio ha commentato:
Non si verificano errori effettuando il test su Mini Office II per Commodore 64
sirus ha commentato:
Il bug credo che sia proprio di visualizzazione, ho inserito in una cella una formula che crea problemi e nella cella contigua 65535, in una terza cella ho inserito la differenza tra le prime 2 citate e come mi sarei aspettato il risultato è 0.
Mi sembrava molto strano che passando dalle varie versioni di Office per arrivare fino alla 2007 sia stato inserito un bug di calcolo simile, effettivamente il bug riguarda l'interfaccia grafica, una delle cose che ha subito sicuramente molte modifiche in Office 2007.
Nemo ha commentato:
Bug confermato con la versione Office Enterprise 2007 il risultato da'100000
Mettendo il punto anzichè la virgola office segnala errore correggendo 77.1 come 771
che schifo...corro su installazione applicazioni
grazie!
Nemo ha commentato:
Ho provato anche a sommare il risultato dell'operazione ad una cella contenente uno..niente da fare il problema non è di visualizzazione ma di calcolo perchè il risultato viene 100001
Mai visto nessuno arrampicarsi cosi'male sugli specchi come la microsoft...
sirus ha commentato:
Nemo, sei sicuro di quello che dici? Io ho provato a fare quello che hai detto con la versione Trial scaricata oggi dal sito della Microsoft e la somma di cui hai parlato funziona benissimo. Rimane il problema di visualizzazione.
DuOMbO ha commentato:
....non ci credo è davvero 10000.. ho provato :( quant'è che costa!? fortuna che a me lo passa l'azienda :P
Jljjch ha commentato:
queste operazioni mi danno questi risultati:

a) =5,1*12850 -> 100000
b) =5,1*12850+1 -> 100001
c) =5,1*12850+2 -> 65537


riferendomi alla cella e sommandoci un numero (H19 è il punto a dell'esempio precedente)

a) =H19+1 -> 100001
a) =H19+2 -> 65537
jazzale ha commentato:
non ci credevo finchè non l'ho visto...per me l'errore è gravissimo, non riesco in nessun modo a riportare tramite moltiplicazione o divisione la cella a 65535!
Continuerò ad usare Calc di Openoffice!
Santana ha commentato:
Purtroppo, come ha ricordato un utente su un altro forum, Excell viene usato anche da molti medici per calcolare il dosaggio dei farmaci da somministrare ai pazienti!!!!!

In generale, questo è un comportamento sconsiderato visto che è proibito utilizzare hardware e software non omologato per usi specialistici; da un software così costoso ci si dovrebbe però aspettare una certa affidabilità, almeno quando si eseguono semplicissime operazioni!

Meno male che la NASA ha recentemente scelto WhiteRiver Linux per la gestione dei computer che guideranno tutte le future missioni di esplorazione spaziale!

P.S. Il problema dei calcoli sballati riguarda anche le calcolatrici fornite dai vari sistemi operativi; sotto Windows (tanto per cambiare) la calcolatrice fornisce 0/0=1 nonostante 0/0 sia una forma indeterminata che richiede un passaggio al limite.
La calcolatrice di Google è stata recentemente corretta in modo piuttosto furbesco perché adesso non fornisce più la risposta per calcoli come 0/0, 1/0, etc.
Sotto Linux, KCalc fornisce correttamente 0/0=NAN (Not A Number), mentre la calcolatrice di Gnome fornisce 0/0=1.
Mario De Ghetto ha commentato:
A proposito di questo commento: "P.S. Il problema dei calcoli sballati riguarda anche le calcolatrici fornite dai vari sistemi operativi; sotto Windows (tanto per cambiare) la calcolatrice fornisce 0/0=1 nonostante 0/0 sia una forma indeterminata che richiede un passaggio al limite." devo dissentire.
Infatti su Windows XP SP2, la calcolatrice, al calcolo 0/0 fornisce "Risultato funzione indefinito".
sirus ha commentato:
In quanto alle conclusioni del post direi che è normale che in un software ci siano dei bug, e ci sono a prescindere che il software sia open o closed. La cosa importante è la velocità con la quale viene approntato un fix.
lucky141 ha commentato:
>Infatti su Windows XP SP2, la
>calcolatrice, al calcolo 0/0
>fornisce "Risultato funzione
>indefinito"

Vero, e a qualunque divisione per 0 risponde con "Impossibile dividere x 0." (con la "x" al posto di "per"...)
Franco ha commentato:
Questo commento è stato eliminato dall'autore.
Franco ha commentato:
Questo commento è stato eliminato dall'autore.
nicgarga ha commentato:
a) non credo sia vero che OO sia frutto *solo* di smanettoni. Ci sono fior di societa' che dedicano programmatori professionisti.
b) errare umanum est: errori, anche clamorosi, sono possibili ovunque.
c) OO puo' correggere (corregge) una falla in pochissimo tempo. MS, monopolista di fatto, la corregge quando (e se) vuole. E non paga per i suoi errori, mentre noi paghiamo per il prodotto. Questa e' la vera differenza fra OO e MSOffice.

ciao
nicola.
Daniele ha commentato:
Comunque è divertente sapere che se moltiplicate due celle separate con ognuna i valori tipo in A1 ci scrivete 65535 ed in B1 77,1 ed in C1 scrivete =A1/B1 il risultato è 850 correttamente. Ora in D1 scrivete la formula =C1*B1
e vedrete che ricalcola 65535 correttamente.
Quindi il problema sembra essere proprio dovuto all'algoritmo di moltiplicazione di excel.
Daniele ha commentato:
Altro esperimento:

Scrivete in A1 =850*77,1 poi in B1 =A1/100 noterete che il risultato è 655,35.

Quindi rimane un problema di visualizzazione e non di conti.
Daniele ha commentato:
Provate a moltiplicare 1310,7 per 50. Otterrete il risultato corretto!!
Santana ha commentato:
Cerchiamo di non fare i furbi!

La calcolatrice di Windows XP SP2 fornisce il risultato giusto proprio perché la Microsoft ha corretto l'abbaglio attraverso il "Software Pacco 2"; ma mi risulta che Windows esista da quasi 30 anni.

Caspita! Gli utenti Windows hanno dovuto attendere 30 anni per avere una calcolatrice funzionante; e ricordiamoci che stiamo parlando di software a pagamento scritto da "professionisti" abbondantemente retribuiti!
Francesco Sblendorio ha commentato:
In questo momento sto usando Windows XP Service Pack 1 (5.1.2600)

Calcolando 0/0 con "calc.exe" ottengo "Risultato funzione indefinito."
Rael Electric Razor ha commentato:
In excel 2003 con SP2 funziona correttamente
Santana ha commentato:
Aridaje con i Service Pack!

In tutte le versioni di Windows sino alla XP senza SoftPack la calcolatrice fornisce 0/0=1.
ma_gio ha commentato:
Per rispondere all'ultima domanda del suo post: come mai anche le auto da centinaia di migliaia di euro si rompono o escono con difetti di fabbrica? Perché come Excel sono prodotte da uomini e gli uomini sbagliano (anche quelli che sviluppano OSS come dimostra il continuo rilascio di patch anche per questisw).
La cosa che più colpisce nel post è la sua malafede. Comunque nel caso fosse in grado di capire qualcosa di minimamente tecnico le consiglio la lettura di questo post: http://www.joelonsoftware.com/items/2007/09/26b.html
Cordiali saluti
Dan ha commentato:
Flamer...
Exodus68 ha commentato:
Io non so che versione di Office 2007 sto usando. Ho avuto difficolta' persino a trovare il comando APRI di questo nuovo pacchetto.
E dire che mastico Computer sin dall'epoca del Commodore 64.
Questo nuovo Office secondo me e' andato indietro a livello di usabilita'.

Tornando all'argomento...
Sono partito da 65535, in una cella a fianco ho messo un numero (es.850), nella terza ho fatto ilprimo numero diviso il secondo (e mi esce ad esempio 77,1). Nella cella successiva rimoltiplico i valori delle celle 2 e 3, risultato: 100000!!!!
In una quinta cella pero' se gli sommo o sottraggo uno, mi esce 65536 o 65534, quindi nel mio e' una questione davvero solo di visualizzazione.

Io sono specializzato in Office... Ma sto cominciando a ripudiarlo.

Ivo - Modena

P.S. Per fortuna domenica 30 (tra tre giorni) non ho 850 invitati a 77,1 euro a testa al mio matrimonio, altrimenti avrei speso 100000 euro al posto di 65535 :)
Toyo ha commentato:
volevo far notare che anche nell'9mmagine postata la somma (in basso a dx) è 131070 (65535*2), quindi è un errore probabilmente di conversione binario<->decimale, non di calcolo.
FridayChild ha commentato:
Il fatto che il bug sia solo a display (e a stampa?) e non nei calcoli non ha molta rilevanza. Buco grave, mi auguro che non abbia fatto danni contabili altrettanto seri.
dalbenny ha commentato:
Confermo : Excell 2003 è Ok
Franco ha commentato:
Mah, a 'sto punto confermo pure io che Excel 2003 non ha questo bug, nonostante Paolo abbia scritto chiaramente nell'articolo che il bug è stato trovato per il 2007.



X
Libero ha commentato:
mi viene come un dubbio..se prima del service pack 1 la calcolatrice di windows diceva che 0/0=1 allora questo significa che era implementata per dare come risultato 1 ad ogni operazione in cui ci fosse un numero che era diviso per se stesso, senza tener conto dell'eccezione provocata dallo 0. Questa cosa è molto triste..
Pier ha commentato:
Proviamo a fare questa prova:
In A1 inseriamo 65535, in A2 850.
In B1 inseriamo la formula =A2*(A1/A2)
In B2 inseriamo la formula =A2*A1/A2

In B1 appare 100.000
In B2 appare 65535

E' un errore di rappresentazione?
Jean Lafitte ha commentato:
grazie Paolo per la tua risposta dell' altro giorno. ti dovrei chiedere un' altra cosa. posso farlo qui o preferisci via mail?
Paolo Attivissimo ha commentato:
Jean,

Se non riguarda il tema dell'articolo, meglio in privato, grazie.
Dan ha commentato:
"allora questo significa che era implementata per dare come risultato 1 ad ogni operazione in cui ci fosse un numero che era diviso per se stesso, senza tener conto dell'eccezione provocata dallo 0. Questa cosa è molto triste.."
Beh, non è detto, non sappiamo esattamente come funziona il programma internamente. Diciamo più o meno tutti dovrebbero sapere che succede in quel caso, e comunque i programmatori si sono risparmiati i grattacapi che possono derivare da una divisione per zero...
Francesco Sblendorio ha commentato:
Se il problema non fosse di calcolo ma solo di rappresentazione, sarebbe grave comunque: un utente legge quello che è scritto sullo schermo, non quello che è scritto in memoria!
Francesco Sblendorio ha commentato:
@Paolo Attivissimo:

Lo "spiegone" di microsoft a me pare vago e non spiega un granché. Che ne pensi?
erasmusjam ha commentato:
@ Santana
La calcolatrice di Gnome si rifiuta di calcolare 0/0, viene fuori un divieto d'accesso e la scritta "espressione malformata" (che brutta traduzione :D)
Rodri ha commentato:
Mi sto rotolando con sta cosa.

Quando torno dovrò chiedere al mio datore di lavoro di ricalcolare il mio stipendio usando Excel 2007.
WR ha commentato:
Ma c'è ancora qualcuno che usa questi programmi (EXCEL) che non salvano neanche in formato ISO?

Ormai è OpenOffice.org è lo standard!
RiVeR ha commentato:
Excel è troppo per me.

Mi fa venire il mal di testa.
Lo Ziorso™ ha commentato:
Secondo me è un codice della cia per beccare chi fa uso del p2p

cio cio

^_^
fabrix ha commentato:
Non si verificano errori effettuando il test su Mini Office II per Commodore 64

ahahaha!
Confermo che non si verificano errori nemmeno se lo calcolo a mano. Di solito.
Angelo ha commentato:
Io ricordo che qualche anno fa mi trovai davanti a un problema di arrotondamento (lavorando in un gestionale Unix scritto in linguaggio C) e cambiai la funzione di arrotondamento aggiungeno (mi pare 0,0005) in modo da attivare un certo bit del processore; ma Santo Iddio si trattava di una software con meno di 10 dipendenti e in fase di test il problema era venuto fuori; evidentemene i test alla Microsoft non li hanno fatti tanto bene.
mr oz ha commentato:
Un contadino di Parma deve concimare un campo di 850mq, sa che gli servono 77,1kg di fumante stallattico per ogni metro quadro. Suo figlio, che è un contadino giovane e moderno, fa il calcolo con Excel 2007. Qualche giorno dopo arriva il letame. "Ma quanta merda hai preso? Qui ci concimiamo tutta la provincia!"... (continua)
Marino ha commentato:
Baco coretto da Microsoft con un "piccolo" (32.5 MB) hotfix scaricabile qui: http://support.microsoft.com/default.aspx/kb/943075/
Sara ha commentato:
Confermo anche io il bug.. riguardo al fatto che sia solo visualizzazione o meno, nei commenti allo spiegone di Microsoft ce n'è uno interessante: se provate a inserire una delle formule incriminate dentro una funzione ARROTONDA, il risultato è sempre 100000 e rimane permanentemente questo, anche se copiato, incollato, usato in altre funzioni, ecc... provate =ARROTONDA(850*77,1;2)e poi usate il risultato in una formula qualsiasi...

...e confermo anche la mancanza di usabilità, 1/4 d'ora per trovare SALVA CON NOME...!!!
FulvioR ha commentato:
ATTENZIONE, questi problemini ce l'hanno tutti gli excel, anche se meno visibili, in particolare con i grafici. Il puntino di un grafico "approssima" il numero che viene rappresentato, in modo più o meno incontrollabile. Lo si vede facilmente facendo grafici di sequenze di numeri molto grandi, che differiscono tra loro di pochi decimali. Non sono più preciso perché mi è capitato molte volte, ma non ho approfondito, spostandomi su MATLAB...