• Aucun résultat trouvé

2.3 Opérations virgule fixe

2.3.1 Formatage

On appelle formatage d’un nombre virgule fixe l’opération consistant à modifier le format de ce nombre pour le représenter sur un nouveau format donné. Considérons un nombre FxP c au format (m, ), ainsi que (m, ), le

2. Arithmétique virgule fixe

format dans lequel on veut représenterc. On rappelle que C désigne la mantisse

dec, c.-à-d. l’entier tel que c = C· 2. Pour passer du format(m, ) au format (m, ), il y a plusieurs cas à considérer en comparant m à m et  à , mais on peut également différencier le cas d’une cible matérielle et le cas d’une cible logicielle. Puisque dans certains cas, formater c revient à décaler C, on

commence donc par définir le décalage sur un entier. 2.3.1.1 Décalage sur un entier

Le décalage est une opération consistant à modifier la représentation binaire d’un nombre en ajoutant (décalage à gauche) ou en supprimant (décalage à droite) des bits à droite du nombre.

Soient un nombre entier C ∈ Z et d ∈ Z le nombre de bits dont on veut

décalerC. Pour un nombre entier, l’opérateur de décalage à gauche se note

et peut être défini comme suit :

C d  C × 2d (2.19)

Pour l’opérateur de décalage à droite, noté, on a :

C  d  C× 2−d… (2.20)

(en considérant la représentation binaire en complément à 2).

À un décalage à droite correspond donc un arrondi de la valeur rationnelle décalée. Or dans nos travaux nous considérons deux types d’arrondis, par tron-cature et au plus proche (voir2.4). Par abus de langage et de notation, nous considérerons donc que le décalage à droite peut s’effectuer avec un arrondi par troncature ou un arrondi au plus proche :

C  d 



C× 2−d si arrondi par troncature 

C× 2−d

si arrondi au plus proche . (2.21) Comme nous l’avons vu, le décalage à droite supprime des bits, donc une erreur d’arrondi est produite. Dans la section 2.4.2, nous verrons comment évaluer cette erreur de calcul selon le type d’arrondi.

2.3.1.2 Formatage sur une cible matérielle

Dans les cibles matérielles, c’est l’utilisateur qui conçoit ses opérateurs et donc décide de leurs largeurs selon ses besoins. Ayant connaissance des formats de départ et d’arrivée, l’utilisateur peut donc soit réduire la largeur d’une variable, soit l’augmenter en lui allouant plus de bits.

m  m : le bit en position m, c.-à-d. le bit de signe de c, est étendu (c.-à-d. recopié) vers la gauche jusqu’à la position m.

m< m : les bits de poids en positions m, m−1, . . . m+1 sont supprimés, il y a alors débordement (voir 2.3.1.4).

2.3. Opérations virgule fixe

   : le format est étendu vers la droite en rajoutant  −  bits à 0. >  : les −  bits de poids faible de c sont supprimés et il y a donc un

arrondi. Or dans nos travaux nous considérons deux types d’arrondis, par troncature et au plus proche (voir 2.4). L’arrondi par troncature consiste simplement à supprimer les bits tandis que l’arrondis au plus proche consiste à ajouter le bit supprimé de poids le plus fort (en position

− 1) en position  et à tronquer les −  bits de poids faible.

Remarque 2.4. Dans le cas >  avec arrondi au plus proche, on peut tomber

sur un cas limite et donc m devra être réajusté.

En matériel, tous ces traitements sont gratuits (en considérant un forma-tage constant au cours du temps), mis à part le cas  >  en considérant un

arrondi au plus proche, qui recourt à une addition.

s 2m 2 s s s 2m 2m s 2m 2m s 0 0 0 2 2 s 2 2 c m> m m< m débordement possible <  >  arrondi

Figure 2.12 – Illustration des différents cas de formatage pour une constante

c en matériel.

2.3.1.3 Formatage sur une cible logicielle

Dans le cas d’une cible logicielle, il faut considérer une condition supplé-mentaire. En effet, les opérateurs et registres ayant des largeurs fixées et non-modifiables, il est nécessaire que la largeur de départ dec, ainsi que la largeur

d’arrivée, soient inférieures ou égales à celle de l’opérateur, notée wL, c.-à-d. on a :

m−  + 1  wL (2.22)

m− + 1  wL (2.23)

2. Arithmétique virgule fixe

m−  + 1  wL: aucun traitement particulier n’est à effectuer, le bit de signe est déjà étendu.

m −  + 1 > wL : d’après la condition (2.23) on a  >  et donc

on applique sur C un décalage à droite de  −  bits (figure 2.13). L’instruction de décalage insère  −  bits de signe à gauche pour

conserver la même largeur.

wL 2m 2 2m 2 s s s 2m 2 s s s s s

Figure 2.13 – Décalage à droite de C dans le cas où m m avec  > .

m< m : le bit en position m devient le nouveau bit de signe du nombre et il est répété aux positions supérieures. Pour ce faire, on décale C à

gauche de d = wL− (m−  + 1) bits (pour placer le bit en position m

tout à gauche du registre et ainsi supprimer les bits supérieurs) puis on re-décale C à droite du même nombre de bits pour les replacer tout à

droite et ainsi insérer des bits de signes sur les bits de poids fort.

wL m−  + 1 2m 2m 2 s s 2m 2m 2 C← C  d s s s 0 0 0 2m 2 C← C  d s s s s 0 0 0

Figure 2.14 – Cas m < m, on calcule (C d)  d.

   : C est décalé à droite de −  bits (on se retrouve sur un cas

précédent illustré par la figure 2.13). –  <  : C est décalé à gauche de −  bits.

2.3.1.4 Débordement

Cette partie décrit ce qu’il se passe lorsqu’on veut représenter une valeur dans un format trop petit pour la représenter (par exemple quand le format 54

2.3. Opérations virgule fixe

d’une somme est fixé). Il y a en effet deux types de débordements possibles, celui induit par l’arithmétique modulaire et celui dit de saturation.

Arithmétique modulaire : Le débordement induit par l’arithmétique mo-dulaire (lui-même dû à l’utilisation de la représentation en complément à deux) consiste simplement à prendre le nombre induit par les bits représentables sur la largeur donnée. Soit une valeur virgule fixev au format (m, ) que l’on

sou-haite représenter sur le format (m, ) avec m < m. On a par définition de v :

v =−vm· 2m+ m−1

i=

vi2i (2.24)

et le nombre virgule fixe représentantv sur le format (m, ), noté ˜v, en

consi-dérant le débordement induit par l’arithmétique modulaire est donné par :

˜

v −vm · 2m + m−1

i=

vi2i. (2.25)

Le bit vm est alors interprété comme nouveau bit de signe à la place devm. L’équation mathématique donnantv à partir de v et du format (m˜ , ) est

la suivante : ˜

v =

(v + 2m)· 2− mod 2m−+1

· 2− 2m (2.26) Cette égalité se vérifie en appliquant les opérations successives sur le développe-ment binaire en complédéveloppe-ment à deux dev de la formule (2.24), on retrouve alors bien sur le développement binaire en complément à deux de ˜v de l’équation

(2.25).

Remarque 2.5. La réinterprétation du bit en positionm comme bit de signe nécessite de convertir v en entier positif pour appliquer l’opération modulaire

avant d’appliquer la conversion inverse, ce qui explique le +2m et le −2m

dans l’équation (2.26).

Exemple 2.3. Soit un nombre c = 36 au format (6, 0), et on souhaite le

représenter sur le format (5, 0). En binaire c s’écrit :

c =20100100

On supprime le bit le plus significatif, on obtient alors la mantisse 100100. Le nombre virgule fixe associé est obtenu en réinterprétant le bit le plus significatif égal à 1, ce qui veut dire que le nombre est négatif. En appliquant la formule ci-dessus, le nombre obtenu ainsi est c =˜ −28 (−32 + 4).

On peut, par analogie avec la figure2.4, construire un cercle avec les valeurs du format (5, 0), c’est-à-dire les entiers de −32 à 31. Ainsi, pour obtenir la

2. Arithmétique virgule fixe

représentation de 36, on part de 0 et on "avance" sur le cercle 36 fois. Après 31 itérations, on se trouve sur la plus grande valeur positive représentable sur le format (5, 0), et à l’étape suivante on passe donc de 31 à −32. Les quatre

dernières itérations amène logiquement sur la valeur−28.

Cette opération modulaire consistant à passer de la plus grande valeur repré-sentable à la plus petite valeur reprérepré-sentable (ou inversement) est donc source d’une grande erreur.

Dans la section3.3.2nous verrons une application de l’arithmétique modu-laire dans le cas d’une somme de plusieurs termes en virgule fixe, qui autorise les débordements intermédiaires tant que le résultat final est représentable sur le format imposé.

Saturation : Le mode de débordement par saturation consiste quant à lui à considérer la plus grande valeur représentable sur le format donné et de même signe que la valeur à représenter, ou en d’autres termes la valeur représentable la plus proche de la valeur à représenter.

Soit une valeurv virgule fixe au format (m, ) que l’on souhaite représenter

sur le format(m, ) avec m< m. Le nombre virgule fixe représentant v sur le

format(m, ), noté ˜v, en considérant le débordement par saturation est donné

par : ˜ v   2m − 2 siv > 0 −2m sinon . (2.27)

Remarque 2.6. L’opération de saturation implique l’utilisation de matériel supplémentaire et fausse tous les calculs en complément à deux (notamment en n’autorisant pas le calcul d’une somme de plusieurs termes par arithmétique modulaire).

Exemple 2.4. On considère le même exemple, soit c = 36 au format (6, 0),

et on souhaite le représenter sur le format(5, 0). c est positif donc le nombre obtenu par saturation est 2m− 2= 31.