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.

q, r = divmod(2L**56, 10)<br />

>>> r<br />

6L<br />

După ce restul este mai mare decît jumătatea lui 10, cea mai bună aproximaţie se obţine prin rotunjirea:<br />

>>> q+1<br />

7205759403792794L<br />

Astfel cea mai bună aproximaţie a lui 1/10, în dubla precizie 754, este peste 2**56, sau<br />

7205759403792794 / 72057594037927936<br />

De remarcat că până la rotunjire, valoarea este de fapt un pic mai mare decât 1/10; dacă nu am rotunji câtul va fi<br />

un pic mai mic decît 1/10. Dar în nici un caz nu poate fi exact 1/10!<br />

Deci, niciodata computerul nu va “arăta” 1/10: ce va arăta este exact fracţia dată mai jos, cea mai bună aproximaţie<br />

în 754 care poate fi dată:<br />

>>> .1 * 2L**56<br />

7205759403792794.0<br />

Dacă se înmulţeşte fracţia cu 10**30, vom vedea valoarea (truncheată) a celor mai semnificativi 30 de digiţi<br />

zecimali ai săi:<br />

>>> 7205759403792794L * 10L**30 / 2L**56<br />

100000000000000005551115123125L<br />

însemnând că numărul exact memorat în calculator este aproximativ egal cu valoarea zecimală<br />

0.100000000000000005551115123125. Rotunjind la 17 digiţi semnificativi rezultă 0.100000000000000001 pe<br />

care <strong>Python</strong> îl afişează (va afişa pe orice platformă conformă 754 care va face tot posibilul să convertească intrare<br />

şi ieşire prin biblioteca C proprie — al dumneavoastră s-ar putea să nu reuşească acest lucru!)<br />

92 Anexa B. Aritmetica în virgulă flotantă: rezultate şi limitări

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

Saved successfully!

Ooh no, something went wrong!