Formats des réels ()

Transcription

Formats des réels ()
2013-01-08
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.
2
1
2013-01-08
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.
3
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.
4
2
2013-01-08
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.
5
Format à virgule fixe normalisé
Pour solutionner les débordements des multiplications
6
3
2013-01-08
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.
7
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.
8
4
2013-01-08
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 à :
(2
x
− 1)
2
Chiffre le plus petit correspond à :
−2 x
x
2x
= 1 − 2− x
= −1
9
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.
10
5
2013-01-08
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
11
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.
12
6
2013-01-08
Addition de deux nombres en Qx
L’addition de deux nombres en Qx est susceptible de
provoquer des débordements.
Exemple (Q3):
Le nombre résultant peut avoir une amplitude supérieure à 1.
(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.
13
Formats à virgule flottante
Le format de la famille des DSP de Texas Instruments
Le format IEEE 754
14
7
2013-01-08
Représentation en virgule flottante
Format TI
Cette représentation utilise un format du type:
y = ss .M × 2 E
M : la mantisse (0.M est d’amplitude inférieure à 1);
E : l’exposant.
s : signe de la mantisse.
Format : 0x E s M b.
Exemple fictif:
Représentation sur 8 bits: 0xeees mmmmb
3 bits pour l’exposant, 5 bits pour la mantisse, incluant son signe.
15
Représentation en virgule flottante
Format général
16
8
2013-01-08
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
17
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.
Le chiffre -1.00 est représenté par:
En base 10: (-2+0.xxx) X 2E.
M = 0x1. 0000b
E = 0x111b
Le chiffre -3.5 est représenté par:
M = 0x1. 0100b
E = 0x001b
18
9
2013-01-08
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.
19
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.
20
10
2013-01-08
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 : 0x100X XXXXb 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.
21
Norme IEEE 754
La norme IEEE 754 diffère un peu du format TI présenté
précédemment.
Ce format est 0x s E M 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.
22
11
2013-01-08
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.
2) Exposant
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.
Le décalage est 2(3-1)-1 = 3.
Donc E = 0 + 3 = 3, ou en binaire 0x011b.
3) Bilan +1 = 0x0011 0000b = 0x30h.
23
Norme IEEE 754
Pour le nombre -1, il s’écrira:
1) M = 0x0000b et s = 1.
2) Exposant
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.
Le décalage est 2(3-1)-1 = 3.
Donc E = 0 + 3 = 3, ou en binaire 0x011b.
3) Bilan -1 = 0x1011 0000b = 0xB0h.
24
12
2013-01-08
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.
25
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).
26
13
2013-01-08
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)
27
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)
28
14
2013-01-08
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.
29
Référence sur la norme IEEE 754
http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber
=4610935
30
15