Informatică, întrebare adresată de joraiasan, 9 ani în urmă

Care sunt cauzele erorilor de calcul cu date de tip real

Răspunsuri la întrebare

Răspuns de Seckar
6
Cand vei fi la facultate vei auzide ceva numit IEEE754, este standardul folosit pentru floating point arithmetic in calculatoarele moderne. 

Ca sa intelegi cum sta treaba, fara sa intru in detalii, o sa o iau asa:

Calculatoarele numara in baza 2, nu in baza 10 ca si noi. Ce inseamna asta?

Pai noi avem 10 cifre posibile ca sa facem numere cu ele(0-9), dupa ce un numar a ajuns la cifra 9, trebuie sa mai adaugam un numar in fata ca sa putem scrie un numar mai mare, de aia dupa 9, vine 10, pentru ca am ramasa fara cifre pentru a scrie un alt numar mai mare de o singura cifra si trebuie sa mai adaugam una.

In baza 2 acem doar 2 cifre posibile, 0 si 1, asa numara calculatoarele. Explicatia pe scurt este ca le e usor sa numere asa, pentru ca 0 si 1 pot fi interpretate ca "vine(1) sau nu vie(0) curent electric pe nu stiu ce fir sau circuit?".

Asadar un calculator nu numara 0 1 2 3 4 5 6 7 8 9 10 ci asa:
0
1
10
11
100
101
110
111
1000
1001
1010
...

Acum, inapoi la baza 10. Incearca sa reprezinti 10/3 ca numar zecimal. Ar fi cam 3.(3), adica cu un infinit de zecimale, adica nu prea merge sa iei o foaie de hartie mare si sa il scrii pe tot. Asta se numeste ca "nu este reprezentabil in baza 10".
 
Ei bine in baza 2 se poate sa scrii 10/3(poti cerceta singur cum). Insa baza 2 are alte probleme, spre exemplu la fel cum noi in baza 10 nu putem reprezenta 10/3, in baza 2 nu poti reprezenta 1/10, care la noi e  un banal 0,1. Daca incerci sa scrii 1/10 in baza 2 vei avea un infinit de zecimale, dar calculatoarele nu au memorie infinita, de aceea la un moment dat nu or sa mai aibe "loc pe foaie" sa scrie restul de un infinit de zecimale si le for ignora. 

Eu desi am un numar gen 3,3333...., daca am o foaie mic,a pe care nu incam decat sa zicem 5 zecimale, voi scrie 3,33333 si atat, adica nu va fi in stare nimeni se fie sigur daca eu voiam 3,33333.... sau pur si ismplu 3,33333000.

Treaba de mai sus, in combinatie cu incercarile de a transforma inapoi din baza 2 in care calculeaza un PC in baza 10 pe care o intelegem noi oamenii, si in combinatie cu faptul ca pentru a stoca un singur numar, sistemul de operare nu ii da voie calculatorului sa foloseasca decat o anumita cantitate de memorie, duc la erori de clacul. 
 
Aceste erori pot fi evitate folosind functii speciale cum ar fi modulul Decimal din Python.
Alte întrebări interesante