Écriture d’un nombre réel
Introduction
1) Calculer 0.1 + 0.2 dans la console de Python. Que constatez-vous ?
Nous allons expliquer cela dans ce TP.
Fonctionnement
Base 10
On écrit naturellement un nombre réel en base 10 mais on oublie parfois le sens de cette écriture. Ainsi lorsqu’on écrit 12.65910 cela signifie :
12.65910 = 1 x 101 + 2 x 100 + 6 x 10-1 + 5 x 10-2 + 9 x 10-3
Il est important de noter ici qu’il est impossible d’écrire avec un nombre fini de chiffres certains réels en base 10 : 1/3, π, √2, …
Base 2
En base 2 le fonctionnement est le même. Prenons l’exemple de 101.10012 :
101.10012 = 1 x 22 + 0 x 21 + 1 x 20 + 1 x 2-1 + 0 x 2-2 + 0 x 2-3 + 1 x 2-4
On verra par la suite qu’il est également impossible d’écrire sur un nombre fini de bits certains réels. Et il y en a plus qu’en base 10.
2) Convertissez 11010.1011102 en base 10.
Conversion base 10 → base 2
Pour convertir un nombre à virgule en base 2, il faut suivre la procédure suivante :
- séparer la partie entière de la partie fractionnaire ;
- convertir la partie entière comme un entier ;
- pour la partie fractionnaire :
- multiplier le nombre par deux ;
- tant que la partie fractionnaire du nombre n’est pas nulle :
- noter la partie entière ;
- multiplier la partie fractionnaire par 2.
3) Prenons l’exemple de 6.3437510.
4) Écrivez 12.695312510 en binaire.
5) Écrivez 0.210 en binaire. Que constatez-vous ?
Certains nombres réels comme 0.210 ou 0.110 ne peuvent pas être écrit exactement en base 2. Ce sont donc des valeurs arrondies qui sont stockées dans la machine. Ce n’est pas un bug, mais pour ces raisons il est très important de ne jamais tester l’égalité de deux flottants :
6) Testez 0.2 + 0.1 == 0.3 dans la console Python. Que constatez-vous ?
Norme IEE-754
La norme IEE-754 est utilisée dans la plupart des langages pour représenter les nombres à virgule flottante. Ces nombres sont représentés sur 32 bits (simple précision) ou sur 64 bits (double précision). Pour en expliquer le fonctionnement nous utiliserons la représentation sur 32 bits.
Définition
Un nombre binaire peut s’écrire sous la forme suivante (un peu comme en écriture scientifique) :
(-1)s x m x 2(e-d)
- s est le signe (0 pour positif et 1 pour négatif) ;
- m est la mantisse comprise entre 1 et 2 ;
- e est l’exposant biaisé (ou décalé) d’une valeur d.
Dans une représentation sur 32 bits, voici la répartition :
- le premier bit est le signe ;
- les 8 suivants sont l’exposant. Le décalage sera alors de 127 pour pouvoir avoir des exposants négatifs ;
- les 23 suivants sont la mantisse. Comme la mantisse commence nécessairement par un 1 : 1.xxxxx2, on ne représente pas ce 1 mais juste les nombres après la virgule.
7) Prenons l’exemple suivant pour comprendre : 1 10000110 10101101100000000000000
8) Soit le nombre flottant suivant : 0 01111011 10011001100110011001100. Trouver la représentation en base 10 de ce nombre.
9) Donner la représentation sur 32 bits du nombre -10.12510.
10) Donner la représentation sur 32 bits du nombre 0.2510.