Université Ammar Télidji Département d’Informatique et de Mathématiques 1ère Année L.M.D MI Module : Structure Machine1 Représentation d'information Nombres fractionnaires 2018/2019 Instruction Non Numériques Nombres entiers positifs ou nuls Information Donnée Nombres entiers négatifs Numériques Signe c1 + valeur absolue c2 Nombres fractionnaires La représentation des nombres réels • Un nombre réel est constitué de deux parties : la partie entière et la partie fractionnaire ( les deux parties sont séparées par une virgule ) Problème : comment indiquer à la machine la position de la virgule ? Il existe deux méthodes pour représenter les nombre réel : Virgule fixe : la position de la virgule est fixe, Virgule flottante : la position de la virgule change ( dynamique ), 1 Représentation en virgule fixe Dans cette représentation la partie entière est représentée sur n bits et la partie fractionnaire sur p bits , en plus un bit est utilisé pour le signe. conversion de nombre fractionnaire : binaire ->Décimal le nombre 1010,101 peut représenter la somme suivante : 1010 est la partie entière du nombre, 101 sa partie fractionnaire. • Soit, en écriture décimale : 8 + 2+ 0,5 + 0,125 = 10,625 1 Représentation en virgule fixe conversion de nombre fractionnaire :Décimal -> binaire Méthode : 1) multiplier la partie fractionnaire par 2 2) extraire la partie entière (un poids) 3) continuer tant que la partie fractionnaire restante ≠0 Exemple Traduire en binaire le nombre 78,347 ? Résultat final : 78,347 écrit en décimal représente 1001110,0101100011 écrit en binaire Partie fractionnaire : 0,347 2 Représentation en virgule flottante • Chaque nombre réel peut s’écrire de la façon suivante : N= ± M * b – M : mantisse , – b : la base , – e : l’exposant Exemple 1: Exemple 2: ( 110,101) 2 = (0,110101) 2 * 2 +3 (0,00101) 2 = - ( 0,101) 2 * 2 -2 e 2 Représentation en virgule flottante • Un même nombre réel peut être écrit de différentes façons. Par exemple: 0.110x2 5 = 110x2 2 = 0.0110x2 6 • Pour éviter des représentations différentes du même nombre, la mantisse est normalisée. Dans la convention la plus courante, un nombre binaire normalisé différent de zéro a la forme: ±1.bbb...bx2 ±e 2 Représentation en virgule flottante Dans cette représentation sur n bits : La mantisse est sous la forme signe/valeur absolue • 1 bit pour le signe • L’exposant ( positif ou négatif ) est représenté sur p bits . • et k bits pour la valeur. Signe mantisse Exposant 1 bit p bits Mantisse normalisée Pour la représentation de l’exposant on utilise : 1) Le complément à deux 2) Exposant décalé ou biaisé k bits Représentation de l’exposant en complément à deux • Exercice 1 On veut représenter les nombres +( 0,015) 8 et -( 15, 01) 8 en virgule flottante sur une machine ayant le format suivant : Signe mantisse Exposant en CA2 1 bit 4 bits Mantisse normalisée 8 bits (0,015) 8 =(0,000001101) 2 = 1,101 * 2 -6 Signe mantisse : positif ( 0) Mantisse normalisé : 1,101 Exposant = -6 utiliser le complément à deux pour représenter le -6 Sur 4 bits CA2(0110)=1010 0 1 bit 1 0 1 0 4 bits 1 0 1 0 0 0 00 8 bits Représentation de l’exposant en complément à deux - (15,01) 8 = - (001101,000001) 2 = - 1,101000001 * 2 3 Signe mantisse : négatif ( 1) Mantisse normalisée : 1,101000001 Exposant = 3 , en complément à deux il garde la même valeur (00 1 1) On remarque que la mantisse est sur 9 bits (1010 0000 1), et sur la machine on a seulement 8 bits sont utilisés pour la mantisse. Dans ce cas on va prendre les 8 premiers bits de la mantisse 1 1 bit 00 1 1 4 bits 1 0 1 0 0 0 00 8 bits Remarque : si la mantisse est sur k bits et si elle est représenté sur la machine sur k’ bits tel que k> k’ , alors la mantisse sera tronquée : on va prendre uniquement k’ bits k - k’ bits perdre dans la précision . L’ Exposant décalé ( biaisé ) • Avec l’exposant biaisé on a transformé les exposants négatifs à des exposants positifs en rajoutons à l’exposant la valeur 2 p -1 -1 Exposant Biaisé = Exposant réel + Biais • La valeur 2 p-1 -1 s’appelle le biais ou le décalage Exemple • On veut représenter les nombres ( 0,015) 8 et -( 15, 01) 8 en virgule flottante sur une machine ayant le format suivant : Signe mantisse Exposant décalé 4 bits 1 bit Mantisse normalisée 11 bits (0,015)8=(0,000001101) 2 = 1,101 * 2 -6 Signe mantisse : positif ( 0) Mantisse normalisé : 101 Exposant réel = -6 Calculer le biais : b= 2 4-1 -1 = 7 Exposant Biaisé = -6 + 7 = +1 = ( 0001) 2 1 bit 0 4 bits 0 0 01 11 bits 1010 0000 0 0 0 Exemple 2 - (15,01) 8 =(001101,000001) 2 = 1,101000001 * 2 3 • Signe mantisse : négatif ( 1) • Mantisse normalisée : 1,101000001 • Exposant réel = + 3 • Calculer le biais : b= 2 4-1 -1= 7 • Exposant Biaisé = 3 + 7 = +10 = ( 1010) 2 1 1 bit 1010 4 bits 1 0 1 0 0 0 0 0 1 00 11 bits La norme IEEE 754 La norme IEEE 754 (Standard for Binary Floating-Point Arithmetic) définit plusieurs représentations de nombres réels (appelés flottants en informatique) : • simple précision (32 bits) • double précision (64 bits) Les nombres sont décomposés en : • signe • mantisse (tronquée) • exposant (décalé) La norme IEEE 754 Représentation Simple précision Double précision taille (bits) 32 64 signe 1 1 Exposant 8 11 Mantisse 23 52 Encodage en IEEE754 (décimal-> IEEE754) Essayons d’encoder le nombre +16,5 en simple précision. 1) Encoder en binaire le nombre à virgule +16,5 = (10000,1) 2 2) Transformer en notation scientifique (souvenez-vous que décaler la virgule revient à multiplier/diviser par 2) (10000,1) 2 = (1,00001*24) 2 3) Identifier les champs signe = 0 (positif) exposant = 4 mantisse = 00001 (on ne prend pas le 1,) 4) Encoder l’exposant 4 doit être codé sur 8 bits par excès de 127 => on encode 131 = (1000 0011) 2 5) Résultat final (En contrôle, écrire tous les 0 à la fin pour faire 32 bits) 0 1000 0011 00001000… Regroupage des bits par 4 0100 0001 1000 0100 0000 0000 … En Héxa (ne pas oublier les 0 à la fin pour faire 32 bits) ----- > 41 84 00 00 La norme IEEE 754 Dans la norme IEEE754 il y a des valeurs spéciales • Le zéro : MANTISSE =0 EXPOSANT = 0 1/0 0 0 0 0 0 0 0 0 00 0000 0000 0000 0000 0000 0000 Infini : MANTISSE = 0 EXPOSANT = 1 PARTOUT Une valeur infinie est utilisée pour indiquer par exemple un débordement ou une division par zéro. Il y a deux valeurs infinies possibles, positive et négative 1/0 1 1 1 1 1 1 1 1 00 0000 0000 0000 0000 0000 0000 NaN (Not a Number) MANTISSE ≠ 0 EXPOSANT = 1 PARTOUT NAN est le résultat d'une opération arithmétique erronée. Par exemple le calcul de la racine carrée des nombres négatifs 1/0 1 1 1 1 1 1 1 1 00 0000 0001 0000 0000 0000 0000 La norme IEEE 754 Remarque • L’avantage de la virgule flottante par rapport à la virgule fixe est que l’intervalle des valeurs possibles est plus étendu (elle est la plus utilisée par les ordinateurs) Décodage du IEEE754 (IEEE754 ->décimal) Essayons de décoder le nombre réel (4024000000000000) 16 qui est en double précision (puisqu’il utilise 64 bits). 1) Analyser le nombre en binaire 0100 0000 0010 0100 0000000… 2) Identifier les champs signe : 0 (positif) exposant : 100 0000 0010 (11 bits en double précision) mantisse : 010000… 3) Décoder l’exposant On trouve un exposant affiché de (100 0000 0010) 2 = (1026) 10 Mais il faut se rappeler que pour coder cet exposant, on lui avait ajouté 1023 (sur 11 bits, codage par excès de 1023). L’exposant réel vaut donc 3. 4) Ecrire le nombre en binaire en notation scientifique (1,01*23) 2 5) En déduire le résultat final : (1,01*23) 2 = (1010) 2 = (10) 10 (multiplier par 23 revient à décaler la virgule de 3 chiffres à droite en binaire).