Représentation de l'information en binaire: Les nombres réels Emmanuelle Peuch
Légende: icônes Cliquer pour avoir la suite du texte Cliquer pour passer à la page suivante Cliquer pour revenir à la page précédente Cliquer pour revenir à la table des matières Lien hypertexte Texte souligné : cliquer sur le lien hypertexte Cliquer pour revenir à la page appelante (retour d'un lien hypertexte)
Table des matières Représentation en virgule fixe Définition Conversion: approfondissement Représentation en virgule flottante Système décimal: rappel Système binaire Etendue des nombres en virgule flottante
Format double précision Exercices Représentation en virgule fixe Représentation en virgule flottante Addition et soustraction des nombres flottants (IEEE754)
Représentation en virgule fixe Définition
Définition La représentation en virgule fixe (ou format fixe) d'un nombre binaire sur N bits comprend une partie entière suivie d'une partie fractionnaire:
Définition Les réels pouvant être, bien sûr, positif ou négatif, c'est la convention complément à deux qui est utilisée pour représenter ces nombres en binaire. Pour convertir la partie fractionnaire (décimal en binaire ou inversement), on utilise les puissances de 2 négatives.
Définition Conversion binaire – décimal d'une partie fractionnaire Convertissons (0,101)b Le procédé est le même qu'avec les nombres entiers, mais avec des puissances de 2 négatives! Quelques puissances de 2 négatives
Définition La partie fractionnaire (101)b est donc, en base 10: 1.2-1 + 1.2-3 = 0,5 + 0,125 = 0,625
Définition Conversion décimal - binaire d'une partie fractionnaire Inversement, convertissons (0,625)d en binaire: On peut décomposer la partie fractionnaire en puissance de 2 négatives. 0,625 = 0,5 + 0,125 = 2-1 +0.2-2 + 2-3 = (101)b
Définition On peut aussi utiliser la méthode de la multiplication répétée par 2 (0,625)d = 1.2-1 + 0.2-2 + 1.2-3 = (101)b
Représentation en virgule fixe Conversion: approfondissement
Conversion: approfondissement On se fixe tout d'abord un format de travail. Prenons un format N = 8 bits k = 5 chiffres après la virgule Pour la partie entière on dispose donc de 3 bits: Un bit de signe (poids fort) 2 bits pour coder sa valeur N'oublions pas qu'on utilise la convention complément à 2 !
Conversion: approfondissement Convertir le chiffre décimal +3,5 Partie entière On utilise la méthode de conversion des entiers signés: (3)d = (011)b
Conversion: approfondissement Partie fractionnaire (0,5)d Rappel: 5 bits pour la partie fractionnaire (0,5)d = 2-1 Sur 5 bits cela nous donne donc (1 0000)d
Conversion: approfondissement Conclusion Le nombre à convertir étant positif, nous n'avons pas besoin de déterminer son complément à 2.
Conversion: approfondissement Convertir le chiffre décimal -1,46876 Valeur absolue de la partie entière (+1)d = (001)b Partie fractionnaire (+0,46875)d = (0 1111)b Détail du calcul
Conversion: approfondissement Le nombre à convertir étant négatif, il faut déterminer le complément à 2 de ce dernier:
Conversion: approfondissement Conclusion
Conversion: approfondissement Conversion binaire - décimal Il suffit de faire le chemin inverse Bit de signe = 0 (nombre positif) On convertit séparément partie entière et partie fractionnaire en décimal. Bit de signe = 1 (nombre négatif) On détermine au préalable le complément à 2 du nombre binaire complet. Puis on convertit séparément partie entière et partie fractionnaire en décimal.
Conversion: approfondissement Arithmétique binaire L'addition (et donc la soustraction puisqu'on est en convention complément à 2) de nombres fractionnaires en virgule fixe se fait sur le même principe qu'en base 10: on aligne les virgule.
Conversion: approfondissement Echelle des valeurs Quels nombres peut on coder en format virgule fixe? Reprenons notre exemple précédent: Format: N = 8 bits k = 5 chiffres après la virgule Virgule fixe
Conversion: approfondissement Partie entière On dispose de trois bits: On est en convention complément à 2 L'étendue de la partie entière va donc de - 4 à + 3.
Conversion: approfondissement Partie fractionnaire On dispose de cinq bits: Sa valeur maximale est donc: 2-1 + 2-2 + … + 2-5 = 0,96875 Conclusion En format 8 bits, avec 5 bits pour la partie fractionnaire, l'échelle des valeurs est: - 4 à + 3,96875.
Conversion: approfondissement Inconvénient du format à virgule fixe Soit à convertir (+1,5)d: On remarque que, pour de petits nombres, il peut y avoir un gaspillage de bits pour la partie entière (beaucoup de 0 en poids fort non utiles). Pour des nombres à peu de décimales, il y a un gaspillage de bits pour la partie fractionnaire (beaucoup de 0 à droite de la virgule non utiles).
Conversion: approfondissement On peut alors utiliser la représentation en virgule flottante (ou format flottant). Ce format est basé sur l'écriture des nombres à l'aide d'une mantisse et d'un exposant. C'est le principe utilisé par la notation scientifique des réels dans notre système décimal. Nous commencerons donc par rappeler cette notation en base 10.
Représentation en virgule flottante Système décimal: rappel
Système décimal: rappel Notation scientifique Un nombre réel X est représenté par une mantisse m et un exposant e:
Système décimal: rappel Ecriture en notation scientifique X = 0,006234 = 0,006234.100 En notation scientifique, on écrit la mantisse sur un seul chiffre différent de zéro: Ici on écrit donc 6,234 au lieu de 0,006234 On dit qu'on normalise le nombre.
Système décimal: rappel Pour normaliser ce nombre, on a effectué 3 décalages vers la droite de la virgule: on a multiplié la mantisse 3 fois par 10. Il faut donc retrancher 3 de l'exposant. La notation scientifique du nombre X est alors: X = 6,234.10-3 Ou encore X = 6,234 E -3 Comparez les notations fixe et scientifique de votre calculatrice!
Système décimal: rappel Autre exemple X = 91234,56 = 91234,56.100 Pour normaliser le nombre on effectue 4 décalage vers la gauche de la virgule (on divise 4 fois la mantisse par 10). On ajoute donc 4 à l'exposant. X = 9,123456.104 = 9,123456 E +4
Représentation en virgule flottante Système binaire
Système binaire Notation scientifique On utilise la même technique que dans le système décimal, mais en travaillant en base 2 ! Notation scientifique Un nombre binaire Y est représenté par une mantisse M et un exposant E:
Système binaire Un nombre binaire flottant est donc constitué: - d'un signe - d'une mantisse - d'un exposant Nous présenterons ici la norme IEE 754. Cette norme définit un format standard qu'on retrouve dans pratiquement tous les ordinateurs depuis 1980.
Système binaire Elle propose deux formats de représentation: Format 32 bits simple précision (type float) Format 64 bits double précision Nous ne parlerons ici que du format 32 bits.
Système binaire Format 32 bits Il est inutile de ranger le chiffre 2 de la base 2 pour exprimer 2E puisque c'est identique pour tous les nombres (implicite).
Système binaire Bit de signe S Exposant E sur 8 bits S = 1 si la mantisse est négative. S = 0 si la mantisse est positive. Exposant E sur 8 bits Il est représenté en binaire décalé avec un biais égal à 127 (translation de 127).
Système binaire Correspondance entre l'exposant réel (sur 8 bits en signé) et l'exposant biaisé (sur 8 bits):
Système binaire L'exposant Eréel = +35 sera représenté par:
Système binaire L'exposant biaisé E est donc un nombre non signé sur 8 bits avec E = Eréel + 127. On remarque alors que: - Le bit de poids fort de l'exposant biaisé E est à 1 quand l'exposant Eréel est strictement positif (E > 127). - Le bit de poids fort de l'exposant biaisé E est à 0 quand l'exposant Eréel est négatif (E 127).
Nous ne parlerons pour l'instant que du format normalisé. Système binaire Il est à noter que la norme IEEE 754, en dehors du format normalisé, admet des codages spécifiques pour la représentation des valeurs 0, +, - ainsi que des représentations dénormalisées. Nous ne parlerons pour l'instant que du format normalisé. Retenons alors que l'exposant réel peut prendre les valeurs entre – 126 et + 127.
Système binaire Valeurs de l'exposant en format normalisé E réel E biaisé (Eréel + 127) 127 254 = (1111 1110)b 126 253 = (1111 1101)b . 1 128 = (1000 0000)b 127 = (0111 1111)b -1 126 = (0111 1110)b -126 1 = (0000 0001)b
Système binaire Mantisse M sur 23 bits La mantisse est normalisée sous la forme: La partie entière étant toujours égale à 1 elle n'est pas représentée (implicite): c'est le bit caché (hidden bit). La mantisse M sur 23 bits ne représente donc que la partie fractionnaire.
Système binaire Pour normaliser la mantisse on procède comme en base 10. Décaler à droite la virgule (multiplier par 2 la mantisse). Il faut donc retrancher 1 à l'exposant. Décaler à gauche la virgule (diviser par 2 la mantisse). Il faut donc ajouter 1 à l'exposant.
Système binaire La mantisse représente toujours la valeur absolue du nombre (on n'utilise pas la notation complément à 2).
Système binaire Conversion de (- 1039)d On convertit (+ 1039)d en binaire (1039)d = (0100 0000 1111)b = (0100 0000 1111)b . 20 On normalise le nombre pour le mettre sous la forme:
Système binaire (0100 0000 1111)b . 20 On décale la virgule à gauche 10 fois. On incrémente l'exposant de 10.
Système binaire Exposant E sur 8 bits Bit de signe S du nombre Translation de + 127 de Eréel = 10 E = 10 + 127 = (137)d = (1000 1001)b Bit de signe S du nombre Nombre négatif (-1039) donc S = 1
Système binaire Conclusion
Système binaire Convertissons le nombre réel binaire suivant en décimal Bit de signe: S = 0 donc nombre positif
Système binaire Exposant biaisé E: E = (0001 0011)b = (11)d Donc Eréel = E – 127 = 11 – 127 = - 116
Système binaire Mantisse: N'oublions pas le bit caché! M = (1,101 1000 0000 0000 0000 0000)b M = 20 + 2-1 + 2-3 + 2-4 = 1,6875
Système binaire Conclusion Le nombre réel est donc, en base dix:
Etendue des nombres en virgule flottante
Etendue des nombres Exposant Eréel Mantisse Quels nombres peut-on exprimer en format NORMALISE simple précision (32 bits)? Exposant Eréel Il varie de -126 à + 127. L'exposant E biaisé varie donc de 1 à 254. Mantisse Mmin = (1,000 0000 0000 0000 0000 0000)b Mmax = (1,111 1111 1111 1111 1111 1111)b
Etendue des nombres Le plus petit réel représentable dans ce format est : Ymin = (1,000 0000 0000 0000 0000 0000)b . 2-126 = 2-126 1,17549.10-38 Il est à noter que nous avons la même valeur en négatif (bit de signe S = 1)!
Etendue des nombres Le plus grand réel représentable dans ce format est : Ymax = (1,111 1111 1111 1111 1111 1111)b . 2127 = (1+2-1+2-2+…+2-23) . 2127 Or (1+2-1+2-2+…+2-23) = S24 est la somme des 24 premiers termes d'une suite géométrique de raison 2-1.
Etendue des nombres Etendue des nombres réels normalisés Ymax = (1+2-1+2-2+…+2-23) . 2127 = (2 – 2-23) . 2127 3,40282 . 1038 Etendue des nombres réels normalisés
Etendue des nombres Codages de zéro Nous avons vu que la valeur minimale de l'exposant était Eréel = -126 (pour les valeurs normalisées). On utilise alors l'exposant Eréel = - 127 (E biaisé = 0) et une mantisse nulle pour coder 0. On obtient donc deux représentation de zéro:
Etendue des nombres Codages de l'infini Nous avons vu que la valeur maximale de l'exposant était Eréel = 127. On utilise alors l'exposant Eréel = 128 (E biaisé = 255) et une mantisse nulle pour coder l'infini.
Etendue des nombres Résumé
valeurs dénormalisées Etendue des nombres Autres codages Bit S E réel E biaisé Mantisse Codage de: 128 255 0 NaN 1 -127 valeurs dénormalisées NaN = Not A Number: codes qui permettent de signaliser des erreurs comme par exemple une division par 0.
Format double précision
Format double précision En double précision, le format est de 64 bits. Exposant Ebiaisé: sur 11 bits Le biais est de 210 – 1 = 1023 Mantisse La partie fractionnaire s'exprime sur 52 bits. Le bit caché est toujours 1.
Exercices
Représentation en virgule fixe Exercice 1 - Convertir les nombres suivants en binaire, virgule fixe: + 1,625 + 3,96875 - 3,96875 + 2,134 Format utilisé - Représentation sur 8 bits - 5 chiffres après la virgule solution
Représentation en virgule fixe Exercice 2 - Convertir les nombres binaire, virgule fixe suivants en décimal: 010,01010 101,11011 solution
Représentation en virgule flottante Exercice 1 Convertir les nombres réels suivants en nombres binaire: norme IEEE754 simple précision (128)d (- 32,75)d (0,0625)d solution
Représentation en virgule flottante Exercice 2 Convertir les nombres réels binaires suivants en décimal (norme IEEE754 simple précision): 1 0111 1010 100 0000 0000 0000 0000 0000 0 1010 1010 110 0000 0000 0000 0000 0000 1 1000 0011 111 0000 0000 0000 0000 0000 0 0111 0101 000 0000 0000 0000 0000 0000 solution
Addition et soustraction des nombres flottants (IEEE754) Soit X = 10,5 et Y = 3,5. Convertir ces nombres en binaire: format simple précision. Calculer en binaire X+Y, -X+Y, X-Y, -X-Y. Vérifier vos résultats en les convertissant dans le système décimal. 1- Comme dans le système décimal il faut aligner les exposants sur le plus grand. solution
Addition et soustraction des nombres flottants (IEEE754) Une fois que les exposants sont identiques, on peut ajouter les mantisses. 2- Lorsqu'une mantisse représente un nombre négatif, on calcule son complément à 2 (Ce qui permet de ne faire que des sommes binaires!). On ajoute ensuite les mantisses. 3- Si la valeur absolue du nombre négatif est le plus grand, le résultat de la somme binaire représente un nombre négatif. Il faut alors calculer le complément à 2 du résultat. 4- Il faut normaliser le résultat de l'opération si nécessaire. solution
FIN Emmanuelle Peuch
Quelques puissances de 2 négatives
Conversion de la partie fractionnaire de – 1,46876 Utilisons la méthode de la multiplication par 2:
Représentation en virgule fixe Intéressons nous tout d'abord à l'étendue des nombres représentables dans ce format: Format 8 bits et 5 chiffres pour la partie fractionnaire. D'où 3 bits pour représenter la partie entière. Le bit de poids fort représente le bit de signe et on est en convention complément à 2. La partie entière représentable va donc de -4 à +3. La partie fractionnaire maximale est: 2-1 + 2-2 + … + 2-5 = 0,96875 L'étendue des nombres représentables dans ce format est donc: - 4 à + 3,96875
Représentation en virgule fixe Conversion de 1,625 Partie entière (3 bits) (1)d = (001)b Partie fractionnaire (5 bits) Solution (1,625)d = (001,10100)b
Représentation en virgule fixe Conversion de 3,96875 Partie entière (3 bits) (3)d = (011)b Partie fractionnaire (5 bits) La partie fractionnaire maximale représentable est 0,96875 = (0,11111)b. Solution (3,96875)d = (011,11111)b
Représentation en virgule fixe Conversion de - 3,96875 Nous venons de voir que: (+3,96875)d = (011,11111)b Nombres signés en convention complément à 2: Solution: (-3,96875)d = (100,00001)b
Représentation en virgule fixe Conversion de 2,134 Partie entière (3 bits) (2)d = (010)b Partie fractionnaire (5 bits) Solution (2,134)d = (010,00100)b
Représentation en virgule fixe 010,01010 Bit de signe (poids fort) à zéro: nombre positif Partie entière: (010)b =(2)d Partie fractionnaire: (01010)b = 2-2 + 2-4 = 0,25 + 0,0625 = 0,3125 Solution: (010,01010)b = (2,3125)d
Représentation en virgule fixe 101,11011 Bit de signe (poids fort) à un: nombre négatif Il faut donc prendre le complément à 2 de ce nombre pour déterminer sa valeur absolue. Partie entière de la valeur absolue: (010)b =(2)d
Représentation en virgule fixe Partie fractionnaire de la valeur absolue: (00101)b = 2-3 + 2-5 = 0,125 + 0,03125 = 0,15625 Solution (101,11011)b = (- 2,15625)b
Représentation en virgule flottante (128)d Bit de signe (poids fort) à zéro: nombre positif On convertit 128 = 27 en binaire et on le normalise: (128)d = (1000 0000)b.20= (1,000 0000)b.27 Rappel: La partie fractionnaire de la mantisse est sur 23 bits. Exposant biaisé: E = Eréel + 127 = 7 + 127 = 134 = (1000 0110)b
Représentation en virgule flottante Solution:
Représentation en virgule flottante (-32,75)d Bit de signe (poids fort) à un: nombre négatif Conversion de 32,75 en binaire: (32)d = (10 0000)b (0,075)d = 0,5 + 0,25 = 2-1 + 2-2 = (0,11)b Normalisation: (32,75)d = (10 0000,11)b.20 = (1,000 0011)b.25
Représentation en virgule flottante Exposant biaisé: E = Eréel + 127 = 5 + 127 = 132 = (1000 0100)b Solution:
Représentation en virgule flottante (0,0625)d Bit de signe (poids fort) à zéro: nombre positif Conversion de 0,0625 en binaire: (0,0625)d = 2-4 = (0,0001)b Normalisation: (0,0625)d = (0,0001)b.20 = (1,0000)b.2-4
Représentation en virgule flottante Exposant biaisé: E = Eréel + 127 = -4 + 127 = 123 = (0111 1011)b Solution:
Représentation en virgule flottante Bit de signe: S = 1, nombre négatif Exposant réel Eréel: E = (0111 1010)b = (122)d Eréel = E - 127 = 122 – 127 = -5 Mantisse: Ne pas oublier le bit caché (chiffre 1 à gauche de la virgule)
Représentation en virgule flottante (1,1)b = 1 + 2-1 = 1,5 Solution: Le nombre réel binaire est donc en base 10: - 1,5 . 2-5 = - 1,5 + 0,03125 = - 0,046875
Représentation en virgule flottante Bit de signe: S = 0, nombre positif Exposant réel Eréel: E = (1010 1010)b = (170)d Eréel = E - 127 = 170 – 127 = 43 Mantisse: (1,110)b = 1 + 2-1 + 2-2= 1,75
Représentation en virgule flottante Solution: Le nombre réel binaire est donc en base 10: 1,75 . 243 1,539316 . 1013
Représentation en virgule flottante Bit de signe: S = 1, nombre négatif Exposant réel Eréel: E = (1000 0011)b = (131)d Eréel = E - 127 = 131 – 127 = 4 Mantisse: (1,111)b = 1 + 2-1 + 2-2 + 2-3= 1,875
Représentation en virgule flottante Solution: Le nombre réel binaire est donc en base 10: 1,875 . 24 = 30
Représentation en virgule flottante Bit de signe: S = 0, nombre positif Exposant réel Eréel: E = (0111 0101)b = (117)d Eréel = E - 127 = 117 – 127 = -10 Mantisse: (1,000)b = 1
Représentation en virgule flottante Solution: Le nombre réel binaire est donc en base 10: 1. 2-10 = 9,7656250.10-4
Addition et soustraction des flottants Conversion de X = 10,5 X = (1010,1)b . 20= (1,0101)b . 23 Exposant E: E = Eréel + 127 = 3 + 127 = 130 = (1000 0010)b
Addition et soustraction des flottants Conversion de Y = 3,5 Y = (11,1)b . 20= (1,11)b . 21 Exposant E: E = Eréel + 127 = 1 + 127 = 128 = (1000 0000)b
Addition et soustraction des flottants Quelle que soit l'opération à effectuer, il faut d'abord aligner les exposants sur le plus grand. L'exposant E le plus grand est celui du nombre X: EX – EY = 130 – 128 = 2 On ajoute donc 2 à l'exposant de Y et on décale 2 fois vers la gauche la virgule de la mantisse de Y. On obtient: Y = (1,11)b . 21 = (0,0111)b . 23
Addition et soustraction des flottants Calcul de X + Y Les exposants étant les mêmes on fait la somme des mantisses:
Addition et soustraction des flottants Vérifions notre calcul en convertissant X+Y en base 10: Eréel = 130 – 127 = 3 X + Y = (1,11)b . 23 = (1+2-1+2-2).23 = 14
Addition et soustraction des flottants Calcul de – X + Y Il faut prendre le complément à 2 de la mantisse de X:
Addition et soustraction des flottants La mantisse de - X + Y est donc:
Addition et soustraction des flottants Vérifions notre calcul en convertissant -X+Y en base 10: Eréel = 129 – 127 = 2 -X + Y = - (1,11)b . 22 =- (1+2-1+2-2).22 = -7
Addition et soustraction des flottants Calcul de X - Y Il faut prendre le complément à 2 de la mantisse de Y après alignement des exposants:
Addition et soustraction des flottants La mantisse de X - Y est donc: Ce qui correspond bien à + 7.
Addition et soustraction des flottants Calcul de - X – Y = - (X + Y) On obtient le même résultat que X+Y mais avec le bit de signe à 1: Ce qui correspond à -14.