Norme IEEE 754 : normalisation et exposant décalé
1. Forme générale d’un nombre flottant
En IEEE 754, un nombre flottant normalisé s’écrit sous la forme :
(-1)^{signe} × 1.mantisse × 2^{exposant_réel}
La partie significative commence toujours par 1. : c’est la normalisation du nombre.
2. Normalisation d’un nombre binaire
Objectif : obtenir une forme du type 1.xxxxx × 2^n.
Exemple 1
101.101₂ = 1.01101₂ × 2²
- On a déplacé la virgule de 2 positions vers la gauche.
- Exposant réel = 2.
Exemple 2
0.0001011₂ = 1.011₂ × 2⁻⁴
- On a déplacé la virgule de 4 positions vers la droite.
- Exposant réel = −4.
Le 1 initial de la forme normalisée n’est pas stocké dans la mantisse : il est implicite. Cela permet de gagner un bit de précision.
3. Structure d’un flottant IEEE 754
Pour le format simple précision (32 bits) :
- 1 bit : signe
- 8 bits : exposant
- 23 bits : mantisse (sans le 1 implicite)
Pour le format double précision (64 bits) :
- 1 bit : signe
- 11 bits : exposant
- 52 bits : mantisse
4. L’exposant décalé (bias)
L’exposant réel peut être négatif. Pour éviter de stocker un entier signé, IEEE 754 utilise un décalage (bias).
Valeurs du bias
- Float 32 bits : bias = 127
- Double 64 bits : bias = 1023
Relation :
exposant_stocké = exposant_réel + bias
Exemples en simple précision (32 bits)
| Exposant réel | Exposant stocké (décimal) | Exposant stocké (binaire) |
|---|---|---|
| 0 | 127 | 01111111 |
| 3 | 130 | 10000010 |
| -4 | 123 | 01111011 |
5. Exemple complet : encodage de 5,75 en IEEE 754 simple précision
Étape 1 : conversion en binaire
5,75 = 5 + 0,75 = 101,11₂
Étape 2 : normalisation
101,11₂ = 1,0111₂ × 2²
- Exposant réel = 2
- Mantisse (sans le 1 implicite) = 01110000000000000000000
Étape 3 : calcul de l’exposant stocké
exposant_stocké = 2 + 127 = 129
129 en binaire = 10000001.
Étape 4 : bit de signe
5,75 est positif → signe = 0.
Résultat final (32 bits)
signe : 0 exposant : 10000001 mantisse : 01110000000000000000000 Nombre IEEE 754 (float 32 bits) : 0 10000001 01110000000000000000000
6. Résumé
- Normalisation : on écrit le nombre sous la forme 1.mantisse × 2^exposant_réel.
- Le 1 initial est implicite et n’est pas stocké.
- L’exposant est stocké avec un bias : exposant_stocké = exposant_réel + bias.
- Bias = 127 en simple précision, 1023 en double précision.
Exemple complet avec 67,452
1. Bit de signe
Le nombre est positif :
signe = 0
2. Conversion en binaire
Partie entière
67 = 64 + 3 = 2⁶ + 2¹ + 2⁰
67₁₀ = 1000011₂
Partie fractionnaire
Conversion par multiplications successives :
0,452 × 2 = 0,904 → 0 0,904 × 2 = 1,808 → 1 0,808 × 2 = 1,616 → 1 0,616 × 2 = 1,232 → 1 0,232 × 2 = 0,464 → 0 0,464 × 2 = 0,928 → 0 0,928 × 2 = 1,856 → 1 0,856 × 2 = 1,712 → 1 0,712 × 2 = 1,424 → 1 0,424 × 2 = 0,848 → 0 ...
Donc :
0,452₁₀ ≈ 0,0111001101₂
Assemblage
67,452₁₀ ≈ 1000011,0111001101₂
3. Normalisation
On veut une forme 1.xxxxx × 2ⁿ :
1000011,0111001101₂ = 1,0000110111001101₂ × 2⁶
Donc :
- Exposant réel = 6
- Mantisse = bits après le 1 implicite
4. Exposant décalé (bias)
En simple précision, le bias = 127.
exposant_stocké = 6 + 127 = 133
133 en binaire :
133 = 10000101₂
5. Mantisse (23 bits)
À partir de :
1,0000110111001101...
Mantisse sur 23 bits :
00001101110011011001100
6. Résultat final IEEE 754 (32 bits)
signe : 0 exposant : 10000101 mantisse : 00001101110011011001100
Nombre final :
0 10000101 00001101110011011001100
Ce motif binaire est l’approximation IEEE 754 simple précision du nombre 67,452.