Représentation des nombres
Transcription
Représentation des nombres
Université de Nice – Sophia Antipolis Licence 1 Sciences & Technologies Informatique Générale Représentation des nombres Jacques Farré [email protected] http://deptinfo.unice.fr/~jf/InfoGene © Jacques Farré 2013 Informatique générale – représentation des nombres 1/36 Représentation des nombres Nous sommes habitués à représenter les nombres sous forme décimale, avec une notation de position, et en utilisant le zéro Par exemple, nous écrivons 107 pour le nombre cent-sept, soit un multiplié par dix au carré plus sept, ou 1×102+0×101+7×100 Mais cela n'a pas toujours été le cas En chiffres romain : CVII, soit cent plus cinq plus deux En chiffres sumériens (30 siècles avant JC), mélange de système décimal et sexagésimal (en base 60) : 60+40+7=107 soixante (∆) plus quatre fois dix (•) plus sept fois un (∆) (ces chiffres pouvaient être réprésentés par des cailloux -calculi en latin- ou des jetons d'argile plus ou moins gros) 1 10 60 600 3600 36000 Mais dans tous les cas, 107 × 2 = 214 : ∆ •••• ∆∆∆∆∆∆∆ 180+30+4=214 CCXIV ou ∆∆∆ ••• ∆∆∆∆ © Jacques Farré 2013 Informatique générale – représentation des nombres 2/36 Notation positionnelle ● Procédé d'écriture des nombres, ● ● ● chaque position est reliée à la position voisine par un multiplicateur, appelé base Chaque position est renseignée par un nombre fini de symboles (qu'on appelle chiffres), représentant en général les valeurs de 0 à base-1 Pour une base B et un nombre écrit dans cette base CnCn-1...C2C1C0 la valeur de ce nombre est, en représentation décimale Cn×Bn + Cn-1×Bn-1 +...+ C2×B2 + C1×B1 + C0×B0 Le nombre 325 en base 8 vaut donc 3×82 + 2×8 + 5 = 213 Ne pas confondre nombre et chiffre © Jacques Farré 2013 Informatique générale – représentation des nombres 3/36 Compter Shadok (extrait de wikipedia) Le système de numération Shadok est quaternaire et formé des nombres Ga (0), Bu (1), Zo (2), Meu (3). C'est un système de numération par position : quand on a quatre Shadoks, on n'a plus de nouveau mot pour les compter, alors on les met dans une grande poubelle, et on dit Bu pour dire que l'on a une grande poubelle et Ga pour dire qu'il n'y a pas de shadoks à côté, d'où Bu-Ga : 1×4 + 0: De même, lorsque l'on a quatre grandes poubelles, on prend une poubelle à poubelle, et on dit Bu-Ga-Ga, et ainsi de suite : 1×42 + 0×4 + 0 Zo-Meu-Ga-Bu = 2×43 + 3×42 + 0×4 + 1 73 = 64 + 8 + 1 =1×43 + 0×42 + 2×4 + 1 = Bu-Ga-Zo-Bu © Jacques Farré 2013 Informatique générale – représentation des nombres 4/36 Représentation binaire Pour des raisons technologiques (passage de courant ou non, sens de polarisation, trou ou bosse ...), les ordinateurs actuels ne manipulent que 2 « chiffres » Les nombres sont donc représentés en base 2, les chiffres étant des bits (BInary digiT), que l'on note par convention 0 et 1 Un nombre s'écrivant BnBn1...B1B0 en binaire aura pour valeur : Bn×2n + Bn1×2n1 + ... + B1×21 + B0×20 Par exemple, 1011 en binaire = 11 en décimal car 10112 = 1×23+0×22+1×21+1×20=8+0+2+1=1110 © Jacques Farré 2013 Informatique générale – représentation des nombres 5/36 Addition binaire Puisqu'un chiffre binaire vaut 0 ou 1, toute valeur ≥ 2 impliquera une retenue Par exemple 10112 + 11102 (1110 + 1410) : 1 + 11 01 1 1 1 1 1 0 = 1 1 0 0 1 C'est bien 2510=24+23+20 de droite à gauche : ● 1+0=1, je pose 1 ● 1+1=2, je pose 0, je retiens 1 ● 1 +0+1=2, je pose 0, je retiens 1 ● 1 +1+1=3, je pose 1, retiens 1 ● 1, je pose 1 Questions : Donner les puissances de 2 de 20 à 215 Que vaut le nombre binaire 11111111 ? Et 11111111 + 1 Quelle est l'écriture binaire du nombre décimal 1026 ? Évaluer approximativement le nombre binaire 10...0 (10×n zéros) ? © Jacques Farré 2013 Informatique générale – représentation des nombres 6/36 Représentation binaire (réponse aux questions précédentes) Les puissances de 2 (puisque 2n=2×2n-1, il suffit de multiplier par 2) 20=1 25=32 210=1024 21=2 26=64 211=2048 22=4 27=128 212=4096 23=8 24=16 28=256 29=512 213=8192 214=16384 ... Le nombre binaire 111111112 : 128+64+32+16+8+4+2+1=25510 noter que 111111112 + 1 = 1000000002 =28 = 25610 De manière générale : 2n+2n1+...+21+20 = 2n+11 La représentation binaire du nombre 102610 : 102410 + 210, soit 210+21, donc 100000000102 10...02 (avec 10×n zéros) = 210×n 210 = 1024 et 103 = 1000, donc 210 ≈ 103, et donc 210n ≈ 103n 220 ≈106 (1 million), 230 ≈109 (1 milliard), 232 = 22×230 ≈ 4×109 (4 milliards) © Jacques Farré 2013 Informatique générale – représentation des nombres 7/36 Une autre façon de convertir du binaire vers le décimal Lire les bits de gauche à droite : si les bits qu'on déjà a lu donnent la valeur V, en lisant un bit de plus à droite, on a soit 2V (si le bit est 0) soit 2V + 1 (si le bit est 1) Pour le nombre binaire 10110010 (128+32+16+2=17810) : 10110010 10110010 10110010 10110010 10110010 10110010 10110010 10110010 : : : : : : : : 0×2 + 1 → V=1 1×2 + 0 → V=2 2×2 + 1 → V=5 5×2 + 1 → V=11 11×2 + 0 → V=22 22×2 + 0 → V=44 44×2 + 1 → V=89 89×2 + 0 → V=178 Repose sur le schéma de Horner (en fait de Newton) : anxn+an-1xn-1+... +a1x+a0 = 0+a0+x(a1+x(a2+...+x(an-1+xan)...) © Jacques Farré 2013 Informatique générale – représentation des nombres 8/36 Une autre façon de convertir du décimal vers le binaire Repose toujours sur le schéma de Horner anxn+an-1xn-1+...+a1x+a0 = (...(anx + an-1)x +…)x + a1)x + a0 Le reste de la division entière par x (ici par 2) donne le chiffre a0 des unités, et on recommence avec (...(anx + an-1)x +…)x+ a1 (qui est le quotient de la division entière par x) pour avoir les autres chiffres Représentation binaire du nombre 102610 1026 = 2 × 513, je mets un 0 à droite : 513 = 2 × 256 + 1, je mets un 1 à gauche: 256 = 2 × 128, je mets un 0 à gauche: 128=2×64, 64=2×32, 32=2×16, 16=2×8, 8=2×4, 4=2×2 : 2 = 2 × 1, 1 = 2 × 0 + 1 : © Jacques Farré 2013 Informatique générale – représentation des nombres 0 10 010 000000010 10000000010 9/36 Octets et mots Puisque l'information est représentée par une suite de 0 et de 1, où commence et où fini un nombre dans la mémoire ou sur un disque ? Regroupement des bits par paquets de 8 : l'octet Un octet peut coder 256 valeurs, de 0 à 255 (28 - 1) Il sert à coder toutes sortes d'informations : nombres, caractères, couleurs, sons ... Mais se limiter à 256 valeurs pour les nombres, c'est trop peu ! Les octets sont eux-même regroupés, par exemple par paquets de 2, 4 ou 8 pour les nombres : les mots Sur 4 octets (donc 32 bits), on peut coder les entiers de 0 à 232-1 (soit un peu plus de 4 milliards : 232 ≈ 4×109 comme vu précédemment); sur 64 bits ≈18×1018 (18 milliards de milliards) © Jacques Farré 2013 Informatique générale – représentation des nombres 10/36 Notation hexadécimale La représentation binaire est longue à lire pour les humains : 8 bits pour un octet, et jusqu'à 64 bits pour un nombre On utilise aussi une notation plus concise, en base 16 ou hexadécimale Pour les valeurs de 0 à 9, on utilise les chiffres décimaux Pour les valeurs de 10 à 15, on utilise les 6 premières lettres de l'alphabet latin : A, B, C, D, E, F Le nombre hexadécimal HnHn1...H1H0 aura pour valeur : Hn×16n + Hn1×16n1 + ... + H1×161 + H0×160 15AACF716 = 1×166 + 5×165 + 10×164 + 10×16³ + 12×16² + 15×161 + 7×160 = 22 719 73510 Comme 16 = 24, 2 chiffres héxadécimaux suffisent pour représenter la valeur d'un octet © Jacques Farré 2013 Informatique générale – représentation des nombres 11/36 Notations hexadécimale et binaire 16 = 24, on a donc les correspondances suivantes : décimal 0 1 2 3 10 11 12 13 14 15 binaire 0000 0001 0010 0011 ... 1010 1011 1100 1101 1110 1111 hexadécimal 0 1 2 3 A B C D E F 15AACF716 = 0001 0101 1010 1010 1100 1111 01112 Questions Quelles sont les représentations hexadécimale et binaire du nombre 27 10 Quelles sont les représentations binaire et décimale du nombre FB3 16 © Jacques Farré 2013 Informatique générale – représentation des nombres 12/36 Notations hexadécimale et binaire (réponse aux questions précédentes) Représentations hexadécimale et binaire de 2710 27 = 16 + 11, donc 1B en hexadécimal 0001 1011 en binaire (soit 16 + (8 + 2 + 1)) 1 hexa 0001 binaire, B hexa 1011 binaire Représentations binaire et décimale de FB316 15x162 + 11x161 + 3x160 = 3840 + 176 + 3 = 401910 ou encore (schéma de Horner) : (15 x 16 + 11) x 16 + 3 FB3 en binaire : © Jacques Farré 2013 F B 3 1111 1011 0011 Informatique générale – représentation des nombres 13/36 Codage des caractères, des couleurs ... Les caractères sont codés sur 1, 2 ou 4 octets 7 bits pour l'ASCII (donc 128 caractères), par exemple 4116 (A), 7A16 (z), 2016 (l'espace) 3016 (le chiffre 0) 8 bits pour l'ISO : ajoute aux 128 caractères ASCII des variantes nationales, par exemple (ISO 8859-15 pour le français) : C016 (À), E616 (æ) Aussi, codages sur 16 ou 32 bits pour les alphabets non latins (avec nombre variable de bits pour UTF-8) Les couleurs sont (en général) codées sur 4 octets Le plus souvent, 3 octets codent l'intensité de chacune des 3 couleurs (rouge, vert, bleu) composant la teinte, et 1 octet est inutilisé, ou sinon il code la transparence Par exemple, la couleur blanc FFFFFF © Jacques Farré 2013 sera codée FBB097, le noir 000000 et le Informatique générale – représentation des nombres 14/36 Décalages gauches Ajouter un 0 à droite de la représentation d'un nombre dans une base B revient à multiplier ce nombre par B : Soit CnCn-1...C2C1C0 (représentant v = Cn×Bn + Cn-1×Bn-1 +... + C2×B2 + C1×B1 + C0×B0) Alors CnCn-1...C2C1C00 représente (Cn×Bn + Cn-1×Bn-1 +... + C2×B2 + C1×B1 + C0×B0) × B + 0 soit 10×v Donc, ajouter n zéros à droite de la représentation du nombre revient à le multiplier par Bn Comme 1012 = 510, alors 10102 = 1010 1012 = 510, alors 1010002 = 4010 (c'est à dire 5×23) Cette opération est appelée décalage gauche (notée par l'opérateur <<) : si a = 5, a << 3 = a × 23= 40 © Jacques Farré 2013 Informatique générale – représentation des nombres 15/36 Décalages droits De manière analogue, supprimer le chiffre des unités revient à calculer le quotient de la division entière par B : Soit CnCn-1...C2C1C0 (représentant v = Cn×Bn + Cn-1×Bn-1 +... + C2×B2 + C1×B1 + C0×B0) Alors CnCn-1...C2C1 représente q = Cn×Bn-1 + Cn-1×Bn-2 +... + C2×B1+C1 (v = B×q+C0) Comme 10112 = 1110, alors 1012 = 510 Donc, supprimer n chiffres à droite de la représentation d'un nombre revient à calculer son quotient dans la division entière par Bn : 1010102 = 4210 et 101010 = 5 Cette opération est appelée décalage droit (notée par l'opérateur >>) : si a = 42, a >> 3 = a ÷ 23= 5 © Jacques Farré 2013 Informatique générale – représentation des nombres 16/36 Masques On peut faire des opérations bit à bit sur une représentation binaire d'un nombre Un masque est un nombre binaire qui permet de faire une telle opération avec un autre nombre Soit le nombre binaire 10110111 et le masque 00111100 Le ET permet de ne retenir que certains des bits : ce masque permet de ne garder que les 4 bits du milieu 10110111 00111100 = 00110100 Le OU permet de mettre des bits à 1 : 10110111 00111100 = 10111111 Le XOR permet d'inverser les bits 10110111 000111100 = 10001011 © Jacques Farré 2013 Informatique générale – représentation des nombres 17/36 Masques et décalages Masques et décalages permettent ainsi de ranger plusieurs (petits) nombres dans un seul mot Par exemple, pour représenter les heures (0-12, donc 4 bits car 24=16), minutes et secondes (0-59, 6 bits car 26=64), on peut n'utiliser que 16 bits 3h 24mn 15s représenté comme 15 24 3 6 bits 6 bits 4 bits 15×210 + 24×24 + 3 soit (15 << 10) OR (24 << 4) OR 3 15×210 + 24×24 + 3 = 15747 = 001111 011000 0011 Pour avoir les heures : 15747 00000000000011112 Pour avoir les minutes : (15747 00000011111100002) >> 4 Pour avoir les secondes : (15747 11111100000000002) >> 10 On peut aussi décaler d'abord et masquer ensuite Pour avoir les minutes : (15747 >> 4) 0000000000001111112 © Jacques Farré 2013 Informatique générale – représentation des nombres 18/36 Les nombres négatifs Avant l'utilisation des bouliers (à partir du 13e siècle), les chinois comptaient à l'aide de baguettes (dès -700) dans un système décimal de position en virgule flottante (l'écriture des nombres était inspirée de l'arrangement de ces baguettes) Les baguettes étaient orientées verticalement pour les puissances de la forme 102p et horizontalement pour celles correspondant à 102p+1, par exemple 256 (ou 25600, ou 2.56, mais pas 2560 ni 25.6) Le 0 était implicite : un espace entre 2 «chiffres» de même orientation : représente 206 (ou plus exactement 206102p), mais pas 26 On trouve des traces des nombres négatifs dans des sources du 3e siècle La couleur des baguettes ou de l'encre (noire ou rouge) indiquait si le nombre était négatif ou positif Mais c'est d'Inde (6e siècle) puis de Perse (9e siècle) que vient à l'occident (vers le 15e siècle) la notion de quantité négative (notion encore rejetée par certains mathématiciens à la fin du 18e siècle !) © Jacques Farré 2013 Informatique générale – représentation des nombres 19/36 Les nombres négatifs pour les ordinateurs Vous écrivez -17 sans vous posez de question Vous pourriez écrire en binaire -10001 (puisque 1710=100012) Mais les machines ne connaissent que 0 et 1, pas le signe - Donc par convention, le bit à gauche représente le signe S (0 si positif ou nul, 1 si négatif) : les nombres sont représentés sur un nombre N de bits (y compris les 0 non significatifs) On pourrait imaginer qu'un nombre (par exemple sur 8 bits) aurait la représentation suivante 1 bit 7 bits exemple pour -17 1 0010001 Pour additionner 2 nombres de même signe, pas de problème ; mais s'ils sont de signe différent ? En décimal, pour -17 + 35, ce n'est pas si simple (on calcule 35-17) Ce ne serait pas mieux en binaire (et il faudrait donc un circuit électronique compliqué pour faire un additionneur) Il faut donc trouver une autre représentation © Jacques Farré 2013 Informatique générale – représentation des nombres 20/36 Les nombres négatifs pour les ordinateurs (complémentation à 1) Si on inverse les bits, 1710 = 0 0010001 -1710 = 1 1101110 On aimerait pouvoir additionner le bit de signe comme les autres (pour simplifier les circuits) Malheureusement, 1710+(-1710) =11...12, et 1710-1710 = 00...02 Donc 0 a deux représentations : soit 00...0, soit 11...1 ce qui ne facilite pas la comparaison d'un nombre à 0 Encore malheureusement, 5–22 donne -18, et -17+22 donne 4 ; il manque 1, ce n'est pas encore tout à fait ça On peut aussi remarquer que -0+1 donne +0 (on perd la dernière retenue car il n'y a pas de bit à gauche pour la recevoir) Il faut encore trouver une autre représentation © Jacques Farré 2013 Informatique générale – représentation des nombres 21/36 Les nombres négatifs pour les n ordinateurs (complémentation à 2 ) Donc si 17 : 00010001, essayons avec -17 : 11101110 + 1, soit 11101111 C'est bien le résultat de 5 – 22 (c'est à dire 5+(-22)), et on peut vérifier que -17+22 = 00000101, c'est à dire 5 Bingo ! Cette représentation, appelée complémentation à 2n (ou simplement complémentation à 2), est celle des ordinateurs actuels Principe : inverser les bits et ajouter 1 Par exemple sur 8 bits : 1010 = 000010102, -1010 = 111101102 100111012 = -9910, 9910 = 011000112 Intervalle des nombres signés sur n bits : [-2n-1 : 2n-1-1] © Jacques Farré 2013 Informatique générale – représentation des nombres 22/36 Les nombres négatifs pour les ordinateurs La complémentation à 2 permet des calculs modulo 2n : on a vu que sur 8 bits -10 s'écrit 11110110 mais c'est aussi la représentation binaire (non signée) de 246 : 246 + 10 = 256 ≡ 0 (modulo 256) en règle générale, si k est un nombre positif, la représentation sur n bits de -k est la même que celle de 2n - k On en déduit par exemple que la représentation (sur 8 bits) de -1 est la même que celle de 255 (11111111) celle de -128 la même que 128 (10000000) celle de -123 la même que 256-123=133 (10000101) © Jacques Farré 2013 Informatique générale – représentation des nombres 23/36 Les nombres signés et non signés dans les ordinateurs 11...1 (-1 en signé) ; c'est aussi le plus grand nombre en non signé : 2n-1 en nombres non signés, 2n-1 + 1 = 0 ! 00...0 (0) 00...1 (1) -K ou 2n-K K <0 (-maxint) 10...1 (minint = -2n-1, le plus petit négatif) 10...0 © Jacques Farré 2013 ≥0 en nombres signés, 2n-1-1 + 1 = -2n-1 ! 01...1 (le plus grand positif signé (maxint) = 2n-1-1 Informatique générale – représentation des nombres 24/36 Nombres négatifs et décalages Les nombres négatifs en complément à 2 conservent les propriérés arithmétiques pour les décalages Par exemple, pour des nombres signés représentés sur un octet : -15 : 111100012 -15 << 3 : 100010002 (-120), et -120 = -15× 23 Pour les décalages droits, on étend le bit de signe -125 : 100000112, -125 >> 3 : 111100000112, c'est à dire -16, et -125 (car – 125 = -16 × 8 + 3 en division euclidienne) © Jacques Farré 2013 Informatique générale – représentation des nombres ÷ 8 = -16 25/36 Avez-vous bien compris ? On représente les nombres sur 8 bits Quel serait la représentation de 97 ? Quelle serait la représentation de -97 ? Soit le nombre signé 10010110 : quelle valeur représente-il ? Quelle serait la représentation de 200 ? © Jacques Farré 2013 Informatique générale – représentation des nombres 26/36 Les réponses Quel serait la représentation de 97 : 64+32+1, donc 01100001 Quelle serait la représentation de -97 : Soit on fait la complémentation : 01100001 + 1 = 10011111 Soit on remarque que c'est la même que celle de 256 – 97 = 159 (=128 + 31, donc 10011111) Soit le nombre signé 10010110 : quelle valeur représente-il ? Soit on fait la complémentation : 01101001 + 1 = 01101010 (64+32+8+2=106, donc c'est -106) 10010110 représente (si non signé) aussi 128+16+6=150, donc c'est 150-256 = -106 Quelle serait la représentation de 200 ? Impossible sur 8 bits, l'intervalle représentable est [-128:+127] © Jacques Farré 2013 Informatique générale – représentation des nombres 27/36 Représentation des nombres réels en virgule flottante On peut représenter un nombre avec une mantisse et un exposant : vous connaissez la notation scientifique : 1,234 × 103 (=1234) Imaginez que la mantisse et l'exposant doivent être représentés sur un nombre fixe de chiffres (respectivement 5 et 2 par exemple), et qu'il faille ôter 50 de l'exposant (le biais, pour avoir des exposants négatifs) ; pour 1234, on aurait alors mantisse exposant 12340 53 soit (1+2/10+3/102+4/103)×1053-50 0,0005 (5×10-4) serait représenté par 50000 46 Dans toute base B, supprimer n chiffres à droite revient à diviser par Bn et ajouter n zéros revient à multiplier par Bn © Jacques Farré 2013 Informatique générale – représentation des nombres 28/36 Approximation et nombres réels en virgule flottante On ne peut pas représenter tous les nombres réels en virgule flottante à cause de la taille limitée pour la mantisse et l'exposant Avec une mantisse de 5 chiffres et un exposant de 2 le plus grand nombre représentable est 99999 99 soit 9,9999 × 1099-50 ≈ 1 × 1050 le plus petit (strictement positif) est : soit (1/104)×10-50=10-54 00001 00 Il est clair qu'on ne peut pas représenter exactement 1,23456, puisque la mantisse ne peut avoir que 5 chiffres : il devra être arrondi, par exemple à 1,2346 L'utilisation des nombres flottants peut produire des erreurs de calcul dues à ces arrondis © Jacques Farré 2013 Informatique générale – représentation des nombres 29/36 Représentation des nombres réels binaires en virgule flottante Les machines utilisent une représentation flottante pour les nombres réels, mais en binaire La représentation binaire en virgule flottante est analogue à celle en décimale, mais en base 2 évidemment Avec par exemple une mantisse sur 5 bits, un exposant sur 3 bits et un biais B valant 3 mantisse exposant 10110 110 = (1+1/4+1/8)×26-3=11, ou (autre façon de calculer) : (11×2-3)×26-3 (puisque 10112=1110, 1,01102=1110×2-3) © Jacques Farré 2013 Informatique générale – représentation des nombres 30/36 Représentation des nombres réels binaires en virgule flottante La mantisse b0b1...bk représente le nombre rationnel m = b0+b1/2+b2/22+...bk/2k , (ou, si n est le nombre binaire b0b1b2...bk , m = n / 2k-1) L'exposant xnxn-1...x1x0, représente l'entier x=xn2n+...x12+x0 La valeur représentée par le couple (m,x) est m.2x-B En forme normalisée, on a toujours b0 = 1 La norme IEEE 754 définit 2 formats (un peu plus compliqués que le modèle cidessus, car les mantisses sont signées) • Simple précision : mantisse sur 23 bits, exposant sur 8, B=127 • Double précision : mantisse sur 52 bits, exposant sur 11, B=1023 • Calculs faits en précision étendue : mantisse sur au moins 64 bits, exposant sur au moins 15 © Jacques Farré 2013 Informatique générale – représentation des nombres 31/36 Représentation des nombres réels attention aux pièges La représentation entière ne permet de compter que jusqu'à l'ordre de grandeur 4×109 (sur 32 bits) La représentation flottante permet de représenter les nombres entre les ordres de grandeur 10-37 et 1037 (sur 32 bits) ou 10-308 et 10308 (sur 64 bits) : on serait tenté de n'utiliser qu'elle ! Mais cette faculté d'exprimer de très petits ou de très grands nombres se paye par une approximation puisque seuls peuvent être représentés exactement les nombres de la forme (b0+b1/2+b2/22+...bm/2m) ×2x-B On a donc des erreurs d'arrondi : par exemple sur 32 bits, 1000 × (1/3000 + 1/3000 + 1/3000) ≠ 1 Un même nombre a plusieurs représentations flottantes : sur n bits, on représente moins de nombres réels flottants différents que de nombres entiers ! 11000...0 | 0...010 01100...0 | 0...011 m.2x = m/2 × 2x+1, et par exemple © Jacques Farré 2013 (1+1/2)×4=6 Informatique générale – représentation des nombres (1/2+1/4)×8=6 32/36 Avez vous bien compris ? Supposons qu'on utilise une mantisse de 2 bits et un exposant de 2 bits avec B=0 Questions : Quelles sont les nombres qui peuvent être représentés ? Combien de ces nombres sont différents ? Quel est le résultat de l'addition flottante 4 + 1 ? Combien d'entiers peuvent être codés sur 4 bits ? Quel est le résultat de l'addition entière 4 + 1 ? © Jacques Farré 2013 Informatique générale – représentation des nombres 33/36 Les réponses Les 4 configurations de la mantisse sont 00 (0), 01 (1/2), 10 (1), 11 (3/2) et l'exposant représente 1 (20), 2 (21), 4 (22), 8 (23) Les nombres représentables sont donc, avec un biais B de 0 : 0 1/2 1 0 1 2 0 2 4 0 4 8 soit 10 nombres différents 3/2 (exposant = 0) 3 (exposant = 1) 6 (exposant = 2) 12 (exposant = 3) seulement : 0, 1/2, 1, 3/2, 2, 3, 4, 6, 8, 12 Notez que, puisque 6=1102, sa mantisse (sur 2 bits) est 11 (on garde bien sûr les bits de plus fort poids) et son exposant est 2 (car la mantisse représente la valeur 1+1/2, ou plus simplement, pour passer de 1102 à 1,12, on a dû décaler la virgule de 2 à gauche) On voit que 5 = 4 + 1 n'est pas représentable, même si 1 et 4 le sont : comme 5 = 1012, on perd le 1 de droite avec une mantisse sur 2 bits, et il sera approximé par 4 ou 6 ; Sur 4 bits, on code tous les entiers de 0 à 15, donc on aura bien 4+1=5 © Jacques Farré 2013 Informatique générale – représentation des nombres 34/36 Avez vous vraiment bien compris ? On prend une mantisse m sur 5 bits et un exposant x sur 3 bits avec un biais de 4 : le nombre représenté vaut (b0+b1/2+b2/22+b3/23+b4/24)×2x-4 10100 011 1012 = 5, donc 5×2-2×23-4 = 5/8, ou si vous préférez vous compliquer la vie, (1+1/4)×23-4 = 1/2+1/8=4/8+1/8 00110 110 3×2-3×26-7 = 3/24, ou (1/4+1/8)×2-1=1/23+1/24 Pour représenter 12 : 11000 111 puisque la mantisse représente 12×2-3, il faut un exposant de 3 (+ 4 de biais, donc 7) Pour représenter 0,3125 : 10100 010 0,3125=5/16, et puisque la mantisse vaut 5×2-2, l'exposant doit être -2 (+4 de biais, donc 2) © Jacques Farré 2013 Informatique générale – représentation des nombres 35/36 Multiplication et addition flottante Vous savez que a.kn × b.km = a.b.kn+m Il suffit donc de multiplier les mantisses et d'additionner les exposants (en retirant 1 fois le biais) : 3/2 × 5/8 = 15/16 En supposant un bias de 3 11000 011 11000 × 10100 010 × = 11000 00000 11000 -------------1111000 (15/8 11110 010 10100 = 011+010-011 = 010 l'exposant vaut donc 2-3 × 2-1) Pour a.kn + b.kn-p = (a+b.k-p).kn : ajuster les exposants (et une des mantisses en conséquence), puis additionner les mantisses : 3/2 + 5/8 = 17/8 11000 011 © Jacques Farré 2013 × 01010 011 = 10001 011 Informatique générale – représentation des nombres 36/36