Napačen izračun razlike

Pomoč pri delu z MS Excelom
Odgovori
bredvink
Prispevkov: 12
Pridružen: Če Sep 27, 2012 11:30 pm

Napačen izračun razlike

Odgovor Napisal/-a bredvink »

Pozdravljeni!
Ob testiranju neke svoje razpredelnice, sem naletel na naslednjo (verjetno) napako:
V celici A1 je vpisan znesek 19210, v celici B1 pa znesek 19140,7.
V celici C1 je formula "=A1-B1", ki da rezultat 69,29999999999930000000
Kako je to možno?
Uporabljam Excel 2007
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Napačen izračun razlike

Odgovor Napisal/-a admin »

:)

Vse je pravilno in tako kot mora biti. Računalniki pač delujejo v dvojiškem sistemu in določenih (desetiških!) vrednosti pač ne morejo predstaviti povsem natančno. V desetiškem sistemu tudi ne moremo natančno zapisati 1/3. V splošnem se vam s takšnimi stvarmi ni potrebno ukvarjati, saj Excel poskrbi, da je velikosti razred napak čim manjši in da s številom matematičnih operacij napake ne rastejo.

V kolikor pa vas to vseeno moti potem lahko upoštevate preprosto pravilo, ki pravi, da vse vmesne operacije izvajate z 2x-tnim število decimalnih mest. Če torej želite natančnost na dve decimalni mesti, potem vse vmesne rezultate računajte zaokrožene na 4 mesta, končni rezultat pa zaokrožite na dve mesti. Hkrati pa to tudi pomeni, da v celicah ne kažite in ne uporabljajte 10 decimalnih mest, če pa vas zanimata samo dve.

Tudi vaš konkreten primer pokaže napako šele ko želite prikazati 12 (!!!!!) decimalnih mest. Ne pričakujte neskončne natančnosti, ker je ne morete doseči; oz. natančneje dosegli bi lahko dokaj poljubno natančnost, vendar pa bi potem slednja zahtevala veloko več računalniških sredstev (pomnilnika, časa...)
lp,
Matjaž Prtenjak
Administrator
bredvink
Prispevkov: 12
Pridružen: Če Sep 27, 2012 11:30 pm

Re: Napačen izračun razlike

Odgovor Napisal/-a bredvink »

Matjaž, hvala za pojasnilo.
Problemček pa vseeno ostane v primeru, ko uporabim filtriranje podatkov in bi rad prikazal le vrstice, ki imajo vrednost različno od 0 (nič).
Pri takem filtriranju ostane vrstica prikazana, ko je format celice "normalen" (na dve decimalki) in je to nekoliko zavajajoče.
Lep pozdrav
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Napačen izračun razlike

Odgovor Napisal/-a admin »

Ker torej števila niso povsem natančna, morate ustrezno prilagoditi tudi preverjanje.

Najpogostejša napaka v računalništvu je primerjanje nečesa z 0. To je pogosta operacija in mnogokrat je napačno implementirana. Napačno je reči računalniku naj preveri ali je nekaj različno od 0, saj je 0 zelo težko doseči. Tudi vrednost 0,00000000000000000001 je različna od nič!

Pravi način je torej, da rečete da je 0 vse, kar se dovolj pribljiža ničli. Recimo da pač rečete, da je vse, kar je manjše od 0,00001, enako nič. Vendar pa s tem zgrešite novo, mogoče še hujšo napako, saj s tem postane tudi -3468 enako nič, ker je manjše od 0,00001. Povsem pravilno je torej da za nič razglasite vse, česar absolutna vrednost je manjša od neke vnaprej določene meje. Ta meja se v matematiki večinoma označuje kot epsilon.

Pa še konkretno v Excelu...

Koda: Izberi vse

=if(ABS(A1)<0,00001;"NIČLA", "različno od nič")
Epsilon (0,00001) si pač izberete sami glede na konkretne zahteve. V primeru računanja z dvema decimalkama se večinoma privzame 0,00001
lp,
Matjaž Prtenjak
Administrator
Odgovori