• Aucun résultat trouvé

1.5 Conclusion

2.1.2 Nombres réels

3 4 5 6 7 −1 −2 −3 −4 −5 −6 −7 −8

+

+

Figure 2.4 – Représentation en complément à deux des entiers de 4 bits

La Figure 2.4 illustre cette représentation pour l’ensemble des nombres entiers utilisant 4 bits, i.e. les nombres dans l’ensemble [−8; 7] ∩ Z.

On constate que contrairement aux deux précédentes représentations, la représentation en complément à deux n’est pas symétrique. En effet, si on a besoin de w bits pour représenter−2w−1, il faut w + 1 bits pour représenter

son opposé 2w−1.

2.1.1.4 Comparaison des représentations pour les nombres entiers La double représentation du 0, dans les représentations SVA et en com-plément à un, compliquent les opérateurs matériels pour les opérations arith-métiques de base et la comparaison entre deux nombres. En comparaison, la représentation en complément à deux permet d’effectuer les opérations arith-métiques de base de façon simple [8]. Par exemple, l’addition de deux nombres dans cette représentation s’effectue bit à bit en partant du bits de poids le plus faible vers le bit de poids le plus fort, modulo 2w, c’est-à-dire comme pour les nombres binaires non signés.

2.1.2 Nombres réels

Il existe plusieurs façons de représenter et d’approcher les nombres réels en machine, mais nous nous intéresserons uniquement aux deux principales représentations, les nombres à virgule flottante et les nombres à virgule fixe. Pour les nombres à virgule flottante, nous présenterons uniquement la norme IEEE754.

2. Arithmétique virgule fixe

2.1.2.1 Virgule Flottante (Norme IEEE754)

La norme IEEE754 [48, 80], ou IEEE Standard for Binary Floating-Point Arithmetic, est le standard pour la représentation binaire des nombres à virgule flottante. Cette représentation se compose d’un signe s, d’un exposant e et

d’une mantisse m (voir Figure 2.5). L’exposant e, stocké explicitement dans

la représentation, est écrit dans une représentation biaisée afin d’être toujours positif. Ce biais, noté b, est égal à 2we−1 − 1, où we est le nombre de bits alloués à l’exposant dans la représentation (on dira également que we est la largeur dee). Le tableau2.1donne les largeurs des différentes composantess, e et m, ainsi que la valeur du biais b, pour les précisions simple et double dans

la norme IEEE754. L’exposant biaisée prend donc ses valeurs dans l’ensemble

[0; 2we − 1] ∩ N, où les deux bornes 0 et 2we− 1 sont réservées à certains cas

particuliers.

e m

s

Figure 2.5 – Représentation de la répartition des bits pour un nombre en virgule flottante simple précision dans la norme IEEE754.

précision largeur totale signe exposant mantisse biais

simple 32 1 8 23 127

double 64 1 11 52 1023

Table 2.1 – Tailles des différentes composantes des deux principaux formats spécifiés par la norme IEEE754, et valeurs du biais pour les précisions simple et double [80].

De plus, afin de fournir l’unicité de la représentation d’un nombre réel

x∈ R dans la norme IEEE754, x est normalisé, c’est-à-dire qu’on écrit x sous

la forme

x = (−1)s· m · 2e,

m∈ [1; 2[ (e étant ici l’exposant non biaisé) est la mantisse normalisée de x

que l’on veut stocker dans notre représentation. Le premier bit d’une mantisse normalisée étant toujours 1, il n’est pas stocké dans la représentation et est donc implicite.

Il peut arriver que x ne puisse pas être normalisé (si x < 2emin, où emin

est le plus petit exposant non biaisé possible2 pour représenter un réel x), x

est alors dit sous-normalisé (ou dénormalisé). Pour un nombre sous-normalisé,

2. Pour un réel x on a vu que l’exposant biaisé e était dans l’intervalle ]0; 2we− 1[∩N, donc au minimum 1. En soustrayant le biaisb on obtient emin=−2we−1+ 2.

2.1. Représentations binaires des nombres

l’exposant biaisé e et le bit implicite de poids fort de la mantisse valent tous

deux 0.

Il existe des exceptions à ces règles permettant de coder les valeurs±0, ±∞

et NaN (Not a Number, pour les erreurs de calculs telles que le résultat d’une division par 0). Le tableau 2.2 illustre les différentes valeurs représentables à partir de l’exposant biaisé e et de la mantisse stockée m (dans ce tableau, wm

indique la largeur de m).

exposant mantissem

valeur représentée (sans le bit implicite)

biaisé e mwm−1. . . m1m0 11. . . 11 = 00 . . . 00 N aN 11. . . 11 00. . . 00 (−1)s× ∞ 00. . . 00 00. . . 00 (−1)s× 0 00. . . 00 = 00 . . . 00 (−1)s× 0.mwm−1. . . m1m0× 2emin 0 < e < 2we− 1 0 m  2wm− 1 (−1)s× 1.mwm−1. . . m1m0× 2e−b

Table 2.2 – Tailles des différentes composantes des formats spécifiés par la norme IEEE754, et valeurs du biais pour les précisions simple et double [80].

Exemple 2.1. Écrivons la représentation approchée du réelπ, notée ˜π, dans la

norme IEEE754. Tout d’abord, la décomposition binaire (infinie) de π s’écrit : π =2 11.001001000011111101101010100010001000010110100011000 . . . On normalise cette représentation :

π =2 1.100100100001111110110101010001000100001 . . .× 21

La mantisse obtenue est normale, le bit implicite vaut 1, et la mantisse m

stockée correspond aux 23 bits de poids fort situés immédiatement après la virgule (on considère l’arrondi au plus proche pour le bit de poids le plus faible). L’exposant non biaisé vaut 1 et l’exposant biaisée s’obtient en ajoutant le biais b égal à 127, soit e = 128. On obtient donc la représentation de ˜π illustrée par

la figure 2.6.

0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1

Figure 2.6 – Représentation de ˜π en flottant simple précision dans la norme

2. Arithmétique virgule fixe

2.1.2.2 Virgule Fixe

La seconde représentation des nombres réels discutée ici est la représen-tation virgule fixe, qui consiste en un nombre entier (signé ou non) multiplié par un facteur d’échelle. Contrairement à l’exposant en virgule flottante, ce facteur d’échelle est implicite dans la notation d’un nombre en virgule fixe. Le nombre entier peut être exprimé dans les différentes représentations des nombres entiers discutées précédemment, mais usuellement, et pour des rai-sons de simplicité d’écriture des opérateurs arithmétiques, la représentation signée en complément à deux est préférée.

Dans cette thèse, les nombres en représentation virgule fixe seront toujours exprimés en utilisant la représentation signée en complément à deux.

Soit x un nombre en virgule fixe, si on note X la mantisse de x (l’entier

stocké dans la représentation),x s’écrit alors :

x = X× 2, (2.5)

où2est le facteur d’échelle avec la position du bit le moins significatif (least

significant bit, lsb). En utilisant (2.4), on remplaceX par sa représentation en

complément à deux signée :

x =  −Xw−1· 2w−1+ w−2 i=0 Xi2i  × 2, (2.6)

w est la largeur (en bits) du nombre X. En effectuant le changement de

variablexi = Xi+ provenant de l’équation (2.5), et en notantm w +  − 1, on obtient :

x =−xm· 2m+ m−1

i=

xi2i. (2.7)

xi est alors le i-ème bit de x et m la position du bit le plus significatif de x

(most significant bit, msb). La figure2.7montre la représentation d’un nombre virgule fixe avec la position (implicite dans le nombre stocké) de la virgule (la virgule étant représentée par un point sur le schéma).

s

m + 1 −

w

−2m2m−1 20 2−1 2

Figure 2.7 – Représentation d’un nombre en arithmétique virgule fixe.

Définition 2.1 (Format virgule fixe). Le format virgule fixe (ou Fixed-Point Format en anglais, nommé dans la suite par l’acronyme FPF) d’un nombre 42

2.1. Représentations binaires des nombres

virgule fixe est déterminé par les positions des bits de poids fort m et de poids

faible . Ce format sera par la suite noté (m, ).

De plus, la largeur w de ce nombre peut-être déterminée à partir de m et 

par :

w m −  + 1. (2.8)

On peut noter enfin qu’on a toujours m >  dans le cas non signé et m >  + 1 dans le cas signé.

Remarque 2.1. Il existe de nombreuses définitions et notations différentes pour le FPF d’un nombre. Souvent le FPF d’un nombre est défini à partir du nombre de bits pour la partie entière, bit de signe exclu (noté i pour Integer

part) et du nombre de bits pour la partie fractionnaire (notéf pour Fractional

part) et est noté Qi,f. On a alors les relations suivante :

i = m et f =−.

Cette notation, appelée notation en Q, est la notation de Texas Instuments pour les nombres virgule fixe signés en complément à deux3. Cette notation trouve ses limites par exemple quand  est positif. En effet, f est alors négatif

et cela revient à dire qu’un nombre de bits est négatif, ce qui n’a pas de sens. C’est pourquoi nous préférerons parler de position du bit de poids le plus fort et de position du bit de poids le plus faible.

Remarque 2.2. Si usuellement on considère (m, ) tel que m > 0 et  < 0, il peut arriver fréquemment d’avoir m  0 (si le nombre est plus petit que 1 en valeur absolue), ou d’avoir  0 (si le nombre est un multiple d’une puissance positive de 2, ou si le nombre est très grand et que la largeur est assez petite pour imposer un  positif ). La figure 2.8illustre de tels cas.

Il n’existe pas de formalisation de la représentation virgule fixe (au sens de la norme IEEE pour la virgule flottante), on peut alors, et c’est tout l’enjeu de cette représentation, choisir la largeur que l’on veut, ainsi que le format(m, ), pour un nombre virgule fixe.

2.1.2.3 Comparaison entre virgule flottante et virgule fixe

Dans [75], D. Ménard compare les codages en virgule flottante et en virgule fixe selon deux critères, celui de l’analyse de la dynamique et le rapport signal à bruit de quantification (RSBQ).

3. Le Q viendrait de Quotient, car à la base la notation en Q n’était suivie que d’un seul nombre,f . Cette première notation était ambiguë car on ne pouvait pas en déduire la largeur du nombre représenté. Afin de lever toute ambiguité, la notationQi,f est apparue, et on peut trouver dans certains documents récents de Texas Instruments la notationIiQf , I pour Integer suivi du nombre de bits pour la partie entière, et Q pour Quotient, suivi du nombre de bits pour la partie fractionnaire.

2. Arithmétique virgule fixe

s

−2m2m−1 2

s

−2m2m−1 2

Figure 2.8 – D’autres représentations de nombres en arithmétique virgule fixe. Dans le premier cas est positif et dans le second m est négatif.

Le niveau de dynamique correspond au rapport logarithmique entre la plus grande valeur et la plus petite valeur représentables sur un nombre de bits donné. Le RSBQ, quant à lui, est une mesure définie comme le rapport entre la puissance du signal et la puissance de l’erreur de quantification. Ces deux mesures mettent en avant que l’exposant explicite du codage en virgule flot-tante permet une plus grande dynamique des données représentables et permet d’avoir un RSBQ quasi-constant pour la virgule flottante quand celui de la vir-gule fixe est fonction du signal d’entrée.

Le codage virgule fixe reste cependant une solution préférable pour l’implan-tation sur des systèmes embarqués. En effet, tout processeur embarqué possède des unités de calcul en entier mais pas forcément d’unité de calcul en flottant. Les calculs en virgule fixe sont plus simples à mettre en œuvre car basés sur le calcul en entiers (calcul bit-à-bit), alors que les calculs en flottant demandent plus de manipulations (dénormalisation des opérandes et normalisation du ré-sultat). De plus, la flexibilité des tailles des données en arithmétique virgule fixe, par rapport à l’arithmétique flottante dans la norme IEEE754, permet d’avoir des processeurs plus petits et donc moins gourmands en énergie. On peut également citer le coût financier de la production de processeurs sans unité de calculs flottants qui est bien moins élevé que celui de processeurs avec unités de calculs flottants. La contrepartie de l’arithmétique virgule fixe est que c’est au développeur d’un algorithme virgule fixe de s’assurer que les opé-rations ont un sens (mêmes positions de la virgule pour les opérandes) et de gérer les problèmes de dynamiques (débordements, choix de la position de la virgule).

C’est pour ces raisons que l’arithmétique virgule fixe est préféré pour les applications embarquées, et que les besoins en méthodes et outils pour aider à une implémentation fiable sont grands. Les prochaines parties présentent alors les méthodes de conversion et de calcul dans cette arithmétique.