Livre_silo 30 août 2013 16:32 Page 49
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
49
2 – Représentation des nombres
D’autres erreurs d’arrondis se présentent lorsque l’on effectue des calculs, notamment entre
des nombres dont les ordres de grandeur sont très différents. Dans ce cas, on effectue le
calcul comme si la précision était infinie, puis on arrondit le résultat obtenu.
1 + 2
−54 = 1, 000000000000000000000000000000000000000000000000000001
demanderait 54 bits de mantisse pour être représenté exactement ; il est donc arrondi à 1.
Cet arrondi peut paraître bénin, mais s’il se produit dans une suite de calculs, il peut contrevenir aux propriétés habituelles des opérations sur les nombres réels. Par exemple, en Python, on peut observer
In [5]: 1 + 2**-54 - 1
Out[5]: 0.0
La somme est en effet calculée en premier et arrondie à 1, puis la différence est calculée et
le résultat vaut donc 0. En revanche
In [6]: 1 - 1 + 2**-54
Out[6]: 5.551115123125783e-17
Comme la différence est calculée en premier, le résultat est ici celui attendu ; mais
on voit que l’addition sur les nombres à virgule flottante n’est pas associative, puisque
(1 + (−1)) + 2
−54
̸ = 1 +
(
(−1) + 2
−54
)
. Des erreurs d’arrondi similaires peuvent se
produire avec toutes les opérations usuelles ; on pourra pour s’en convaincre étudier l’évaluation en machine de
(
1 + 2
−50
) 2 .
On retiendra qu’il n’ est pas possible de savoir de façon certaine si le résultat d’un calcul est
égal à sa valeur théorique. La principale conséquence en est qu’un test du type a==b n’a en
général pas de sens si a et b sont deux nombres à virgule flottante, puisque ceux-ci ont pu
subir des erreurs d’arrondis. On remplacera donc un tel test par une condition de la forme
abs(a-b) à traiter et de l’ordre de grandeur des erreurs auxquelles on peut s’attendre sur a et b.
Exercice 2.42 Trouver le nombre à virgule flottante représenté par le mot binaire
0001000000111101001110010101100000000000000000000000000000000000.
Exercice 2.43 Comment est représenté le nombre 2 −1 022 (qui est égal à environ 2, 225 × 10 −308 ) ?
Exercice 2.44 Représenter les nombres suivants avec la valeur la plus précise que vous pourrez trouver
dans la littérature : la vitesse de la lumière dans le vide, le nombre d’Avogadro, la constante de Coulomb.
Pour lesquels de ces nombres la précision des nombres à virgule flottante sur 64 bits est-elle insuffisante ?
Connaissez-vous une grandeur physique ou chimique pour laquelle l’étendue des nombres à virgule flottante est insuffisante ?
Exercice 2.45 Par quel mot binaire est représenté en machine le nombre entier 13 ? Et le nombre à virgule
flottante 13, 0 ?
Exercice 2.46 À combien de décimales environ correspondent 52 chiffres binaires après la virgule ?
Précédent

- 62/402

Suivant