320 likes | 547 Vues
Formats des nombres réels. 7 janvier 2013. Introduction. Si la représentation des nombres entiers est bien maitrisée sur l’ensemble des microprocesseurs, la représentation en nombres réels l’est moins.
E N D
Formats des nombres réels 7 janvier 2013
Introduction • Si la représentation des nombres entiers est bien maitrisée sur l’ensemble des microprocesseurs, la représentation en nombres réels l’est moins. • Si notre microprocesseur ne fonctionne qu’en nombre entier, on peut le faire travailler en nombre réel en utilisant l’approche de virgule fixe. • Exemple (sur 8 bits) : • 0x0011 . 0110b • Pour le processeur, il voit 54 en décimal. • Pour nous, qui avons mentalement ajouté le point décimal, on voit 3.375 en décimal.
Format à virgule fixe • Ce format est dit format à virgule fixe. • On peut faire des additions: • 0x0011 . 0110b + 0x0001 .0001b = 0x0100 . 0111b • Pour le processeur: 54 + 17 = 71 (en décimal) • Pour nous : 3.375 + 1.0625 = 4.4375 (en décimal) • … et des multiplications. • Toutefois, il y a un risque de débordement, en particulier avec les multiplications. • 54 X 17 = 918 qui ne se représente pas sur 8 bits.
Format à virgule fixe • Sur 16 bits, 918 est représenté comme suit: • 0x0000 0011 1001 0110b • Sur 16 bits, le chiffre 3.58594 (résultat du produit de 3.375 par 1.0625) est: • 0x0000 0011 .1001 0110b • En décalant de 4 bits vers la droite, on trouve (sur 8 bits) • 0x0011 .1001b • Ce nombre est: 3.5625 • Il y a une erreur de troncation. • On a eu de la chance, pas de débordement pour le nombre réel, puisque l’on peut tronquer les décimales.
Pour pallier à ce problème • On peut utiliser le format à virgule fixe normalisé. • Les nombres sont représentés dans une plage allant de -1 à +1. • Le point décimal est juste après le bit le plus significatif, qui sert à représenter le signe. • Nombre négatif en complément à 2. • Ou, si le processeur le permet, on peut utiliser la représentation à virgule flottante.
Format à virgule fixe normalisé Pour solutionner les débordements des multiplications
Format à virgule fixe normalisé • Représenté par le vocable Qx, avec x, le nombre de décimales après le point. • Exemple – format Q3. • Représenté sur 4 bits (3+1); • Représentation en complément à 2; • Zéro est 0x0000b; • 0.000b • Le plus grand nombre positif est 0x0111b • 0.111b ou 7/8 en base 10.
Format à virgule fixe normalisé • Exemple – format Q3. • Le plus grand nombre négatif est 0x1000b • 1.000b. • Complément à 2 : • 0.111b + 0.001b = 1.000b (non signé) • Ce qui donne -1.
Format Qx • Bilan: • Taille du nombre est x+1 bits. • x bits les moins significatifs sont après le point; • Le bit avant le point est le signe; • Positif = 0 • Négatif = 1 (et nombre en complément à 2) • Chiffre le plus grand correspond à : • Chiffre le plus petit correspond à :
Format Qx • Plus grand nombre: • x = 3 (4 bits) : 1-2-3 = 7/8 = 0.875 • x = 7 (8 bits) : 1-2-7 = 0.9921875 • x = 15 (16 bits) : 1-2-15 = 0.99996948242188 • Plus le nombre de bits est élevé plus il y a de résolution et mieux la plage de -1 à +1 est couverte.
Multiplication de deux nombres en format Qx • La multiplication de 2 nombres d’amplitude inférieure ou égale à 1 donne un nombre d’amplitude inférieure ou égale à 1. • Donc, pas de débordements avec une multiplication. • Exemple (Q3): • (0x0.101b) X (0x1.001b) = (0x11.01 1101b) • 0.625 X -0.875 = -0.546875 • En pratique, on soit tronque le résultat à 0x1.011b • -0.625 • Ou on arrondit à 0x1.100b • -0.5
Multiplication de deux nombres en format Qx • Exemple (Q3): • Le calcul a exigé 8 bits, car le résultat comporte 6 décimales après le point. Le nombre était en format Q6. • Pour revenir en Q3, on peut décaler le résultat de 3 bits vers la droite. (0x1111 1.011b) et ne garder que les 4 derniers bits. • L’exemple montre que la troncation pour mettre le résultat sur 4 bits entraîne une imprécision. • Donc on travaille en Q15 habituellement.
Addition de deux nombres en Qx • L’addition de deux nombres en Qx est susceptible de provoquer des débordements. • Le nombre résultant peut avoir une amplitude supérieure à 1. • Exemple (Q3): • (0x0.101b) + (0x0.100b) = (0x1.001b) • 0.625 + 0.5 = -0.875 ????? • 0.625+ 0.5 = 1.125 > 1. • Des précautions doivent être prises lors des additions.
Formats à virgule flottante Le format de la famille des DSP de Texas Instruments Le format IEEE 754
Représentation en virgule flottanteFormat TI • Cette représentation utilise un format du type: • M : la mantisse (0.M est d’amplitude inférieure à 1); • E : l’exposant. • s : signe de la mantisse. • Format : 0x EsM b. • Exemple fictif: • Représentation sur 8 bits: 0xeeesmmmmb • 3 bits pour l’exposant, 5 bits pour la mantisse, incluant son signe.
Représentation en virgule flottante • Format général
Mantisse de signe positif • Si le signe de la mantisse est 0, le nombre qui est représenté par la mantisse est 01.M X 2E. • Le chiffre 1.00 est représenté par: • M = 0x0. 0000b • E = 0x000b • Le chiffre 3.5 est représenté par: • M = 0x0. 1100b • E = 0x001b • Donc 1.75 x 2 = 3.5
Mantisse de signe négatif • Si le signe de la mantisse est 1, le nombre est négatif et il est représenté par la mantisse est 10.M X 2E. • En base 10: (-2+0.xxx) X 2E. • Le chiffre -1.00 est représenté par: • M = 0x1. 0000b • E = 0x111b • Le chiffre -3.5 est représenté par: • M = 0x1. 0100b • E = 0x001b
Détail du calcul • Exemple #1: (0x0011 0100b) • Négatif: • Mantisse: 10.0100 • Complément à 2 : 011011 + 1 = 011100 • Donc le nombre correspondant est : -01.1100 • Exposant : 001 • La valeur correspondante est : 21 = 2. • Le nombre représenté par 0x0011 0100b est -011.100 en binaire ou -3.5 en décimal.
Reste le cas du zéro • Par convention, le nombre zéro est définit par une mantisse nulle et un exposant E = 0x1000…000b. • Dans l’exemple de représentation fictive, ce serait: (0x1000 0000b). • Dans les faits, ce nombre est: • Mantisse: 1.0000 • Exposant : 100 (négatif, complément à 2 est : -100b = -4) • Le nombre représenté par 0x1000 0000b est 0.0001 en binaire ou 2-4 = 0.0625 en décimal. • Ce « petit » nombre est considéré comme étant 0.
Reste le cas du zéro • Cela est généralisé pour tous les cas ou l’exposant E = 0x1000…000b. • Ainsi, tous les nombres : 0x100XXXXXb avec X = 0 ou 1 sont considérés comme étant égaux à 0. • Le plus petit nombre positif est: (0x1010 0000b). • Mantisse: 1.0000 • Exposant : 101 (négatif, complément à 2 est : -011b = -3) • Le nombre représenté par 0x1010 0000b est 0.001 en binaire ou 2-3 = 0.125 en décimal.
Norme IEEE 754 • La norme IEEE 754 diffère un peu du format TI présenté précédemment. • Ce format est 0x s EM b. • Différences avec la norme de la série TMS320Cxx • Le signe du nombre est le bit le plus significatif. • L’exposant n’est plus représenté en complément à deux, mais est une valeur décalée de 2(e-1)-1, avec e, le nombre de bits de l’exposant.
Norme IEEE 754 • Ainsi, si dans la poursuite de l’exemple à 8 bits, je considère le nombre +1, il s’écrira: • 1) M = 0x0000b et s = 0. • Donc la valeur de base qui est 1.M est 1.0000. L’exposant du 2 sera 0. Le nombre 1 est donc 1.0000 X 20. • 2) Exposant • Le décalage est 2(3-1)-1 = 3. • Donc E = 0 + 3 = 3, ou en binaire 0x011b. • 3) Bilan +1 = 0x0011 0000b = 0x30h.
Norme IEEE 754 • Pour le nombre -1, il s’écrira: • 1) M = 0x0000b et s = 1. • Donc la valeur de base qui est -1.M est -1.0000. L’exposant du 2 sera encore 0. Le nombre -1 est donc -1.0000 X 20. • 2) Exposant • Le décalage est 2(3-1)-1 = 3. • Donc E = 0 + 3 = 3, ou en binaire 0x011b. • 3) Bilan -1 = 0x1011 0000b = 0xB0h.
Norme IEEE 754 • Pour le nombre -3.5, il s’écrira: • 1) Puisque le nombre est négatif : s = 1. • 2) Exposant et mantisse • Le décalage de l’exposant est 2(3-1)-1 = 3. • 3.5 s’écrit en binaire 0x11.10b • Décalons ce nombre pour le mettre sous la forme 1.xxx. • Ici, il faut décaler vers la droite une seule fois pour trouver 0x1.1100b • Ainsi, la mantisse est 0x1100b et l’exposant de 2 est 1, car on a décalé 1 fois vers la droite. • E = 1 + 3 = 4 = 0x100b • 3) Bilan -3.5 = 0x1100 1100b = 0xCCh.
Norme IEEE 754 – Le zéro et l’infini • Pour le nombre 0, il s’écrira: • 0xX000 0000b. • Il y a donc deux zéros, un positif et un négatif. • Pour l’infini (oui oui vous avez bien lu): • 0xX111 0000b. • Tous les bits de l’exposant à 1 et ceux de la mantisse à 0. • Il y a donc deux infinis, un positif et un négatif. • Si la mantisse n’est pas nulle, on considère que « ce n’est pas un nombre » (NaN – Not a Number).
Norme IEEE 754 • Le plus grand nombre normalisé est: • 0xX110 1111b. • Tous les bits de l’exposant à 1 sauf le dernier (sinon, c’est l’infini) • Tous les bits de la mantisse à 1. • Valeur: • 0x1.1111b X 2(6-3) = 0x1111.1b = 15.5 (décimal) • Le plus grand nombre dénormalisé est: • 0xX000 1111b. • Tous les bits de l’exposant à 0. • Tous les bits de la mantisse à 1. • Valeur: • 0x1.1111b X 2(0-3) = 0x0.0011111b = 0.2421875 (décimal)
Norme IEEE 754 • Le plus petit nombre normalisé est: • 0xX001 0000b. • Tous les bits de l’exposant à 0 sauf le dernier . • Tous les bits de la mantisse à 0. • Valeur: • 0x1.0000b X 2(1-3) = 0x0.01b = 0.25 (décimal) • Le plus petit nombre dénormalisé est: • 0xX000 0001b. • Tous les bits de l’exposant à 0 • Tous les bits de la mantisse à 0 sauf le dernier • Valeur: • 0x1.0001b X 2(0-3) = 0x0.0010001b = 0.1328125 (décimal)
Norme IEEE 754 • Presque 1: • 0x0010 1111b. • Valeur: • 0x1.1111b X 2(2-3) = 0x0.11111b = 59/64 = 0.921875 (décimal) • En pratique, on travaille plutôt sur: • 32 bits en simple précision; • 64 bits en double précision. • Ce qui est disponible dépend de l’équipement et des compilateurs.
Référence sur la norme IEEE 754 • http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4610935