Principes
- signe : 1 bit (0 -› positif, 1 -› négatif)
- position de la virgule : exposant permettant d'obtenir une représentation normalisée du nombre
- chiffres du nombre : mantisse (partie fractionnaire de la représentation normalisée)
représentation normalisée
(1011,101101)2 | = (1011,101101)2 × 20 | |
= (101,1101101)2 × 21 | ||
= (10,11101101)2 × 22 | ||
= (1,011101101)2 × 23 | -› représentation normalisée : 1,mantisse × 2exp |
stockage de l'exposant
Il faut pouvoir stocker indifféremment des exposants positifs (nombres dont la valeur absolue est supérieure à 1) ou négatifs (nombres dont la valeur absolue est inférieure à 1) :
|
|
décalage de l'exposant
Exemple pour un exposant stocké sur 5 bits : décalage = 25 - 1 - 1 = 15.
Ainsi, si l'exposant de la représentation normalisée vaut exp, la valeur stockée sera :
Exemples pour un exposant stocké sur 5 bits :
(1011,101101)2 | = (1,011101101)2 × 23 | -› exposant stocké : 3 + 15 = 18 |
(0,00101)2 | = (1,01)2 × 2-3 | -› exposant stocké : -3 + 15 = 12 |
stockage de la mantisse
A une exception près, tous les nombres ont une représentation normalisée sous la forme :
Par conséquent, il n'est pas nécessaire de stocker le 1 situé à gauche de la virgule. On économise ainsi un précieux bit pouvant être utilisé à meilleur escient.
Comme indiqué ci-dessus, il existe une exception : 0 (zéro). Pour cette valeur, il sera nécessaire d'utiliser une combinaison binaire spéciale.
En pratique
Pour trouver la représentation en virgule flottante d'un nombre décimal, il y a donc plusieurs étapes :- Convertir le nombre en binaire
exemple 1
(2007)10 -› (11111010111)2exemple 2
(-0,28125)10 -› (-0,01001)2 - Déterminer la représentation normalisée du nombre
exemple 1 (suite)
(1,1111010111)2 × 210exemple 2 (suite)
(-1,001)2 × 2-2 - Ajouter le décalage à l'exposant trouvé et convertir ce résultat en binaire
exemple 1 (suite et fin)
exemple 2 (suite et fin)
Norme IEEE 754
Cette norme définit deux types de nombres en virgule flottante : simple précision (32 bits) et double précision (64 bits).Simple précision
- taille totale : 1 + 8 + 23 = 32 bits
- exposant sur 8 bits =› décalage = 28-1 - 1 = 127
- Dans de nombreux langages de programmation (C, C++, Java...) le type de donnée associé est nommé float
Double précision
- taille totale : 1 + 11 + 52 = 64 bits
- exposant sur 11 bits =› décalage = 211-1 - 1 = 1023
- Dans de nombreux langages de programmation (C, C++, Java...) le type de donnée associé est nommé double
valeurs particulières
La norme IEEE 754 réserve les exposants 000...000 (uniquement des 0) et 111...111 (uniquement des 1) pour coder des valeurs particulièresexposant | mantisse | valeur représentée |
---|---|---|
000...000 | 000...000 | 0 (zéro) |
000...000 | 000...001 à 111...111 | nombre dénormalisé valeur = ± 0,mantisse * 2-126 ou -1022 |
111...111 | 000...000 | ± infini |
111...111 | 000...001 à 111...111 | NaN (Not a Number - pas un nombre) exemple : 0 / 0 |
Exercices
Donnez la représentation en virgule flottante des nombres ci-dessous sans utiliser de calculatrice.