Problema M$ Excel, Eroare stupida de calcul
![]() ![]() ![]() |
Problema M$ Excel, Eroare stupida de calcul
Executron |
![]()
Post
#1
|
||
![]() Membru fan UAP Group: Members Posts: 2.061 Joined: 27 June 07 From: Bucuresti ![]() |
Attached thumbnail(s) ff.JPG ( Size: 188.95k ) Number of downloads: 512 ff2.JPG ( Size: 194.7k ) Number of downloads: 528 |
||
--------------------
VW Passat
1,9TDI/131HP/2002/Highline/Tiptronic ///
Dacia 1300 1974 Lux :) "The law, in its majestic equality, forbids the rich as well as the poor to sleep under bridges, to beg in the streets, and to steal bread." |
|||
paul_damian |
![]()
Post
#2
|
![]() Membru mult Group: Members Posts: 644 Joined: 21 April 04 From: Medias, Romania ![]() |
Cred ca problema aceasta ar trebui sa o duci pe grupul de discutii de la MS. Probabil e din modul in care se tin intern datele, dar o explicatie o vei capata numai de la insideri. Trebuie sa recunosc ca nici eu n-am observat "eroarea" pana acum...
|
--------------------
Dacia
Sandero
Stepway, 2021 Ex Dacia Logan KissFM 1.4, 2008
Ex Dacia 1310, 1999 Ex Dacia 1100, 1969 |
|
os |
![]()
Post
#3
|
![]() Dictator. Comunist. Arbitrar. Pe scurt: rau. Group: Moderatori Posts: 1.528 Joined: 29 April 04 ![]() |
Bun venit in lumea calculelor in "virgula mobila"!
Eroarea este explicabila si normala (are si nume: "eroare de trunchiere"), nu are nimic de a face cu Excel ci cu reprezentarea interna a numerelor in orice calculator digital si provine din urmatoarea cauza: Reprezentarea interna a numerelor reale ("floating point"="virgula mobila") este de forma: N = m*b^e, in care: m - mantisa b - baza (stabilita prin conventie) e - exponent. Fiindca b se stie, se memoreaza m si e ca numere intregi cu un anumit numar (maxim) de cifre. Eroarea care se vede provine din faptul ca m nu se poate reprezenta ca un interval continuu, ci prin pasi corespunzind modificarii unui bit (cifra binara). Daca in aplicatie (asa cum se intimpla de cele mai munte ori) eroarea e nesemnificativa (dar deranjeaza optic) chestiunea se rezolva modificind reprezentarea, in cazul de fata de exemplu "numar cu 3 zecimale"). La aficare sistemul va rotunji valoarea afisata, si 0.099999999 devine 0.100. |
--------------------
.
.
. Muschii mei minte nu are.
Cip-Cirip! Cip-Cirip! Cip-Cirip! |
|
JORJ |
![]()
Post
#4
|
![]() Membru autentic Group: Members Posts: 292 Joined: 4 January 05 ![]() |
O astfel de eroare de trunchiere (de la a 15-a zecimala sau ceva de genul asta) este nesemnificativa pentru calcule normale.
Daca e vorba de lei si ti se pare ca pierzi bani, ma angajez eu sa iti platesc zilnic diferenta de suma de la 0,1 la 0.0999999999999996 RON. Ti-i dau in avans pentru asumtia ca as trai 100 de ani, si mai adaug si durata vietii fiului si nepotului meu ![]() Uite choiar sunt dispus sa iti platesc in avans aceasta suma Sa vedem ... Folosid excelul se pare ca eu, fiul si nepotul meu iti datoram suma integrala de 0.000000000044068915 RON. Poti trece oricand sa ridici suma, doar sa imi lasi restul te rog ![]() Later edit: Numerele normale (single precision) de orice tip (naturale, intregi, reale) sunt reprezentate in calculatoare in 32 de biti. Asta inseamna teoretic ca succesiunea maxima de numere se rezuma la valoarea de 2 la puterea 32. Numarul maxim reprezentat este mai mic insa pentru ca se mai stocheaza si informatii legate de semn( + sau - cel putin un bit) ca si cativa biti pentru pozitia virgulei (floating point). Cu astfel de numere lucreaza cred calculatoarele mici portabile de la contabilitate cu 8 digiti. Dupa ce am observat precizia de cca 15-16 cifre a excelului tind sa cred ca el foloseste double precision, care inseamna 64 de biti pentru reprezentarea interna a fiecarui numar. Teoretic primul bit se refera la semn, cam 53 de biti se refera la numarul in sine (succesiunea de cifre implicit virgula ajungand ca numar natural la cateva milioane de miliarde) iar cam 10 biti stocheaza ordinul de marime sa spun asa adica 10 la puterea x unde x asta poate merge la peste 1000 (adica milioanele de miliarde de mai devreme inmultite cu 10 la puterea o mie - mie mi-ar cam ajunge). Astfel cu o precizie de cca 15 digiti (pe care tu ai remarcat-o) excelul poate lucra cu cifre cu pana la 1000 de zerouri (exprimate ca atare evident cu exponent - si trunchiate la un numar rezonabil de digiti). Ma rog, una peste alta, e de bine. Pentru cine e pasionat poate vedea definitiile din wikipedia: http://en.wikipedia.org/wiki/IEEE_754 http://en.wikipedia.org/wiki/Floating_point http://en.wikipedia.org/wiki/Single_precision http://en.wikipedia.org/wiki/Double_precision This post has been edited by JORJ: 7 Jan 2009, 10:55 |
--------------------
Dacia Logan
Laureate 1.4 Perla
- B -XX - XXX Nu dau flashuri
Daca vreau sa depasesc semnalizez si astept Nu claxonez decat daca e absolut necesar Folosesc proiectoarele doar cand e ceata |
|
IsNa |
![]()
Post
#5
|
![]() Membru autentic Group: Members Posts: 1.147 Joined: 11 July 02 From: Timisoara ![]() |
Yep.
Orice calculator nu poate reprezenta cu precizie absoluta orice numar in virgula flotanta. De fapt doar cele care se pot descompune in polinomi de puteri negative ale lui 2 se pot reprezenta exact. Toate celelalte se reprezinta cu o anumita eroare, care devine vizibila daca afisezi rezultatul cu suficiente spatii zecimale. In calcule stiintifice complexe programatorii trebuie sa tina cont de aceasta eroare, dar presupun ca la tine nu conteaza prea mult. |
--------------------
Skoda
Fabia Combi + Citigo ASG
2007 / 2013 Forta sa fie cu voi !!
|
|
bucatzel |
![]()
Post
#6
|
![]() Membru plictisit Group: Moderatori Posts: 6.487 Joined: 19 May 08 From: Timisoara ![]() |
In facultate, ne-au invatat ca in practica, ce-i cu un ordin de marime mai mic se ignora.
La celalalt pol al preciziei, am cetit pe undeva ca 30 de zecimale la Pi sunt suficiente pentru a calcula distanta intre doua planete cu precizie de un metru. Tu ce faci cu alea 20 de zecimale? Off-topic. Ca sa fie efectul si mai pregnant, ar mai fi nevoie si de un pentium mai primavaratic ![]() |
--------------------
Dacia
1300
1981
- 3-SB-2608 Si cu dansa-ntransa, si cu sufletu' in rai... cam greu...
|
|
Executron |
![]()
Post
#7
|
![]() Membru fan UAP Group: Members Posts: 2.061 Joined: 27 June 07 From: Bucuresti ![]() |
Wow.. Multumesc mult pentru raspuns, m-am cam lamurit care e situatia
![]() Eroarea aceea nu creeaza nici o problema, am postat azi-noapte putin enervat pentru ca pierdusem o ora (din ambitie) pentru a descoperi greseala (credeam ca a mea) de calcul. Eroarea acceptata pentru proiectul respectiv era de 0,5, deci eram bine in marja, dar ma oftica ca nu iesise perfect ![]() Singurul deranj era acela vizual. Corect, daca se limiteaza la 4 zecimale numarul devine frumos -0,1 ![]() @Jorj... Mistoc ![]() Multumesc tuturor pentru efortul depus a-mi explica! |
--------------------
VW Passat
1,9TDI/131HP/2002/Highline/Tiptronic ///
Dacia 1300 1974 Lux :) "The law, in its majestic equality, forbids the rich as well as the poor to sleep under bridges, to beg in the streets, and to steal bread." |
|
![]() ![]() ![]() |
Lo-Fi Version Harta site Parteneri Jocuri online Curs Valutar HRH Haine din lana merinos | Time is now: 6th June 2025 - 07:00 |