28.01.2015 Views

Tutorial Python - Starship

Tutorial Python - Starship

Tutorial Python - Starship

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ANEXA<br />

B<br />

Aritmetica în virgulă flotantă: rezultate şi<br />

limitări<br />

Numerele în virgulă flotantă sunt reprezentate în hardware-ul calculatorului ca fracţii în baza 2 (binare). De<br />

exemplu, fracţia zecimală<br />

0.125<br />

are valoarea 1/10 + 2/100 + 5/1000, şi în acelaşi fel fracţia binară<br />

0.001<br />

are valoarea 0/2 + 0/4 + 1/8. Aceste două fracţii au aceeaşi valoare, singura diferenţă reală fiind că prima este<br />

scrisă în baza 10, iar a doua în baza 2. Din păcate majoritatea fracţiilor zecimale nu pot fi reprezentate corect ca<br />

fracţii binare. O primă concluzie este că, (în general, numerele în virgulă flotantă zecimală pe care le introduceţi<br />

au numai o reprezentare aproximativă prin numerele în virgulă flotantă binară memorate în calculator.<br />

Problema este uşor de înţeles întî în baza 10. Să considerăm fracţia 1/3. O puteţ aproxima cu o fracţie î baza 10:<br />

0.3<br />

sau, mai precis,<br />

0.33<br />

sau ,şi mai precis,<br />

0.333<br />

şi tot aşa. Nu contează ce număr de digiţi veţi scrie, rezultatul nu va fi nicicâd exact 1/3, dar creşte acurateţea<br />

aproximării lui 1/3.<br />

În acelaşi mod, nu contează câti digiţi în baza 2 folosiţi, valoarea zecimală 0.1 nu va fi reprezentată exact niciodată<br />

printr-o fracţie. În baza 2, 1/10 este o fracţie care se repetă la infinit<br />

0.0001100110011001100110011001100110011001100110011...<br />

Oprirea la un număr finit de biţi dă o aproximare. Iată ce se afişează în situaţia următoare :<br />

>>> 0.1<br />

0.10000000000000001<br />

Pe majoritatea maşinilor existente astăzi acest rezultat se afişează dacă introduceţi 0.1 la prompterului <strong>Python</strong>-ului.<br />

89

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!