Représentation en virgule flottante
Beaucoup d’applications numériques manipulent les données autres que les entiers. Ces derniers sont appelées nombres flottant. De façon générale, un nombre flottant est une représentation interne d’un nombre réel et il permet ainsi de coder des grands nombres. A un nombre à virgule flottante on associe deux jeux de données :
- Le premier représente les chiffres significatifs du nombre c’est-à-dire la mantisse.
- Le second indique la puissance à laquelle la base est élevée : c’est l’exposant. Exemple 10E6
Il existe plusieurs représentations pour les nombres flottant.
Exemple : 13x106 = 0.13x108 = 1.3x107 = 1300x104
Il nous faut donc représenter ces nombres sous une forme normalisée afin d’obtenir une forme unique c’est-à-dire une représentation qui ne varie pas d’un matériel à un autre. Un nombre normalisé en virgule flottante est sous la forme : X = ±0.α1α2… αtβe
où 0 ≤ αi ≤ β-1
0 ≤ m < 1
α1 ≠ 0
Exemple :
27.38 = 0.273x10²
0.047x103 = 0.47x10²
Il existe plusieurs conventions de représentation :
- La première représentation est la représentation IBM. Cette représentation utilise 32 bits :
|S (1 bit) |Exposant(7 bits) |Mantisse (24 bits)| - La représentation IEE, elle utilise également 32 bits repartie comme suite :
|Exposant (7 bits) | S (1 bit) | Mantisse (24 bits)|
Représentation dans la norme IEE
La base utilisée dans la représentation est la base 16. Il convient donc de transcrire d’abord le nombre à représenter en base 16. Ensuite il faut le normaliser. Dans la norme IEE l’exposant de référence à savoir 64.
Exemple :
Soit à représenter le nombre suivant en virgule flottante dans la norme IEE : 27,38
- Conversion en base 16 : 1B.6147AE
- Normalisation : 0.1B6147AE x 10+2
- Calcul de l’exposant : 64 + 2 = (66)10 = (1000010)2
- Signe : 0
|1000 010|0 | 0001 1011 0110 0001 0100 0111| = 8 4 1 B 6 1 4 7
Comment retrouver la valeur décimale d’un nombre représenté en virgule flottante dans la norme IEE
On retrouve dans un vidage de fichier les valeurs hexadécimales suivantes (84163852)16
|1000010|0| 0001 0110 0011 1000 0101 0010|
- S = 0 (nombre positif)
- E = (1000010)2 = (66)10
- Décalage : 66 – 64 = 2
- 0001 0110 0011 1000 0101 0010 = 1 6 3 8 5 2 alors X = +0.163852 x 16²
- Le décalage X = (16.3852)16
- En base 10 : X = 1x161 + 6x160 + 3x16-1 + 8x16-2 + 5x16-3 + 2x16-4
X = 16 + 6 + 3/16 + 8/16² + 5/163 + 2/164
X = (22,22)10
Exercice :
1- Représenter en IEE
- (27.75)10
- (34.675)10
- (-25.99)10
- (0.0017)10
2- Décoder
- 512AB017
- 1A3B1468