[bglug] Excel sbaglia i conti, ahimè anche OpenOffice
Diego
mlpita@bergamo3.it
Gio 21 Ago 2008 17:01:34 CEST
In data Thu, 21 Aug 2008 16:13:56 +0200, ha scritto:
> In data Thu, 21 Aug 2008 16:10:42 +0200, i Berta
> <iberta.caravaggio@tiscali.it> ha scritto:
>
>> Scusa, ma a cosa ti serve il formato personalizzato? usando un formato
>> NUMERO con 9 DECIMALI mi sembri che Excel faccia i calcoli esatti.
Mi spiace, ma te ne dovrai fare una ragione!
Purtroppo non ho potuto verificare sul foglio che hai mandato perchè non
ho un decopressore per 7z ma il fatto che i fogli di calcolo sbaglino i
conti è intrinseco nel modo con cui vengono rappresentati i numeri nel
computer.
Dirò una cosa ovvia per molti, ma magari qualcuno la troverà interessante.
Sul computer i numeri con la virgola vengono memorizzati all' interno di
un gruppo di bit la cui quantità è fissa (generalmente 32 o 64 bit) con i
quali, nel caso di usare 32 bit, si possono memorizzare 2^32 (cioè
4'294'967'296) valori diversi.
In pratica possiamo memorizzare tutti i numeri INTERI da 0 a
4'294'967'295, oppure tutti i numeri INTERI da -2147483648 a +2147483647,
oppure se volessimo potremmo memorizzare tutti i numeri INTERI che vanno
da -1147483648 a +3147483647, resta il fatto che in totale potremmo
rappresentare "solamente" 4'294'967'296 valori diversi.
Ora sappiamo tutti che tra due numeri interi diversi (es. 0 e 1) ci
possono essere invece infiniti numeri con la virgola e che non sarà mai
possibile rappresentarli tutti utilizzando un numero finito di bit.
Il computer però usa un numero finito di bit anche per rappresentare i
numeri con la virgola, e per far ciò usa un trucchetto: una parte dei 32
bit li usa per memorizzare un numero intero, come ad esempio il numero
"273613" ed un altra parte la usa per memorizzare la posizione della
virgola su questo numero, permettendoci quindi di rappresentare
"0,00273613", "0,273613", "2,73613", "273,613" etc etc
Resta il fatto che in tutto con 32 bit potrà rappresentare 2^32 valori
diversi e quindi buona parte di quell' infinità di valori con la virgola
li dovrà approssimare. Non solo.... proprio per i limiti intrinseci di
questo tipo di rappresentazione il computer non riesce a memorizzare con
precisione alcuni valori apparentemente molto semplici, come 0,1 (vedi
approfondimenti).
Ecco il perchè dei tuoi calcoli sbagliati!
Ciao, Diego
Per approfondire:
http://it.wikipedia.org/wiki/Virgola_mobile (Quello che ho detto io ma in
maniera più tecnica)
http://it.wikipedia.org/wiki/IEEE_754
http://support.microsoft.com/kb/78113/en-us (Floating-point arithmetic may
give inaccurate results in Excel)
http://www.cpearson.com/excel/rounding.htm (Rounding Errors In Microsoft
Excel)
Maggiori informazioni sulla lista
bglug