• Aucun résultat trouvé

Les nombres r´eels

Dans le document ARCHITECTUREDES ORDINATEURS (Page 33-37)

2.2 Conventions de repr´esentation des nombres

2.2.2 Les nombres r´eels

Deux m´ethodes permettent de repr´esenter les nombres r´eels : les repr´esentations envirgule fixeet virguleflottante.

Repr´esentation “virgulefixe”

La repr´esentation virgule fixe est souvent utilis´ee dans des domaines d’application o`u l’on ne dispose que de calculateurs travaillant sur des nom-bres entiers et que la rapidit´e de calcul est un param`etre incontournable (par exemple en traitement du signal). La solution consistant `a coder les nombres sous forme “scientifique” ou “flottante”, pour s´eduisante qu’elle soit, a en effet pour cons´equence une augmentation non n´egligeable des dur´ees de traitement.

La repr´esentation “virgulefixe”fixe arbitrairement la position de la virgule

“entre” deux chiffres de la repr´esentation binaire. On parle de repr´esentation Qklorsqu’on a octroy´ekbits `a la partie fractionnaire. Il faut ´evidemment faire une analyse pr´ealable de la dynamique des quantit´es manipul´ees pour ´eviter tout ph´enom`ene de saturation ult´erieure qui pourrait ˆetre engendr´ee par les traitements.

Exemple 2.3 Le nombre 5,75 peut ˆetre cod´e sur N = 16 bits en Q8 de la fa¸con suivante :

00000101, 11000000

o`u la virgule est repr´esent´ee de fa¸con symbolique pour rappeler le codage.

Le nombre entier correspondant est celui qui serait obtenu par arrondi de la multiplication du r´eel par 2k. Ainsi, le nombre−5,75 sera cod´e, avec la mˆeme r`egle :

−5,75×256 =−147210= FA4016= 11111010, 01000000

D’un point de vue op´eratoire, la somme de deux nombresQk estQk et leur produit estQ2k. Il faut aussi remarquer que les chiffres significatifs sont alors en poids fort du r´esultat et non en poids faible ! Cela explique la pr´esence dans certains processeurs d’op´erateurs demultiplication-d´ecalagepermettant d’avoir un r´esultatQk apr`es multiplication.

Exemple 2.4 On consid`ere les nombres cod´es surN = 4 bits en virgulefixe Q3 et on effectue une multiplication “sign´ee”. La restitution du r´esultat exige un d´ecalage `a droite de 3 positions. Soit, tout d’abord, le cas de deux nombres positifs :

Exemple 2.5 Avec les mˆemes r`egles de codage, on consid`ere maintenant deux nombres de signes oppos´es :

Exemple 2.6 Avec les mˆemes r`egles de codage, pour deux nombres n´egatifs :

En pratique on utilise souvent le format Q15 qui impose de ramener les nombres manipul´es `a des valeurs inf´erieures `a 0,5 en module.

Dans ce type de codage, la gestion de l’emplacement de la virgule est donc laiss´ee `a la charge du programmeur, ce qui n’est pas sans poser un certain nombre de difficult´es. En effet, si on veut conserver la pr´ecision, le nombre de bits de la repr´esentation devra ˆetre augment´e. On peut faire les remarques suivantes :

− Pour effectuerP additions, on ajoute log2P bits `a la repr´esentation.

− Les multiplications posent un probl`eme plus d´elicat. Le r´esultat du pro-duit de deux nombres cod´es surN bits est sur 2N bits. Des troncatures successives peuvent conduire `a des r´esultats d´esastreux.

Malgr´e ces inconv´enients, ce type de codage est largement utilis´e lorsque les contraintes de temps de calcul sont tr`es fortes. En effet les op´erations font appel aux op´erateurs (additionneurs, multiplicateurs. . . ) “entiers” dont la rapidit´e de calcul est bien sup´erieure `a celle d’op´erateurs “flottants”.

Repr´esentation en “virguleflottante”

Ce type de repr´esentation est utilis´e lorsqu’une variable xest d´eclar´ee, entre autres, sous une des formes :

real x en Pascal float x en C single x en basic

dans quelques langages de haut niveau courants. La valeur rang´ee dans la cellule dont le nom estxsera alors cod´ee sous la forme :

<signe><valeur absolue>×2exposant

Le principe du codage, donc l’´evaluation des trois quantit´es “signe”, “valeur absolue” et “exposant”, d’un nombrexest le suivant :

1. On convertit|x|en binaire ;

2. Le champ associ´e `a la valeur absolue est d´etermin´e parnormalisation.

Cette normalisation consiste `a amener le 1 de poids fort soit juste avant, soit juste apr`es la virgule. Ainsi, le nombre x= 11,37510 = 1011,0112

peut ˆetre normalis´e de l’une des deux fa¸cons suivantes :

− 1011,0112→0,10110112(1)

− 1011,0112→1,0110112(2)

3. Le d´ecalage impos´e par la normalisation correspond `a des multiplications ou divisions par 2, et doit donc ˆetre compens´e, ce qui fixe la valeur de l’exposant. Dans le cas pr´esent :

− 1011,0112= 0,10110112×24→exposant = 4

− 1011,0112= 1,0110112×23→exposant = 3 L’exposant doit ensuite ˆetre repr´esent´e en binaire.

Tout ce qui pr´ec`ede nous conduit aux remarques suivantes :

− Le premier chiffre avant ou apr`es la virgule ´etant toujours 1, il n’est pas n´ecessaire de le faire apparaˆıtre dans la repr´esentation interne. Cela permet d’´economiser un bit sur la repr´esentation. On d´esigne celui-ci parbit cach´e(hidden bit) ;

− Ceci interdit toute repr´esentation d’un nombre ´egal `a z´ero. Il faudra donc trouver un codage de l’exposant permettant de r´esoudre ce probl`eme.

Reprenons l’exemple pr´ec´edent en choisissant les r`egles, arbitraires, sui-vantes :

– On d´ecide de choisir la normalisation (1) qui donne 0,10110112× 24. Etant donn´e que l’on ne garde pas le 1 de poids fort, la partie conserv´ee est 011011. On d´esignera cette quantit´e par mantisse; – On code l’exposant en compl´ement `a deux, ce qui donne ici 1002; – On choisit comme convention de signe : 0 pour le signe + et 1 pour

le signe−;

– Le nombre sera cod´e sur 16 bits avec un bit pour le signe, 11 bits pour la mantisse et 4 bits pour l’exposant. Le code obtenu, sous la forme<signe / mantisse / exposant>, est alors :

0/ 011 0110 0000/0100

Avec cette convention l’exposant peut prendre des valeurs comprises en-tre −810 et +710. Le probl`eme pos´e par le codage du “0” peut ˆetre r´esolu en affectant une valeur +7 ou −8 pour l’exposant, celle de la mantisse ´etant indiff´erente. Pour pr´eserver une certaine sym´etrie choisissons−8.

Pour savoir si une variable est nulle, il suffit donc de v´erifier si la valeur de la repr´esenatationde son exposant est −8. Le test de nullit´e d’un nombre devrait cependant ˆetre ind´ependant de la repr´esentation de celui-ci. C’est la raison pour laquelle on peut d´ecider d’ajouter la constante 8 `a la valeur de l’exposant pour en avoir le code. De cette fa¸con, la nullit´e de tout nombre peut ˆetre v´erifi´ee en testant l’´egalit´e de la valeur<exposant>`a 0.

Nous donnons table2.3quelques repr´esentations internes de l’exposant dans le cas o`u le nombre de bits consacr´es `a cet exposant est 8 :

Exposant Exposant Exposant cod´e binaire en base 16 en base 10

100000010 82 2

100000001 81 1

100000000 80 0

011111111 7F −1

011111110 7E −2

011111101 7D −3

Table 2.3: Exemples de codage de l’exposant

Remarques

− Le choix de la repr´esentation est le r´esultat d’un compromis entre l’´etendue de l’intervalle repr´esentable ou dynamique (caract´eris´ee par le nombre de bits de l’exposant), et lapr´ecisionsouhait´ee (caract´eris´ee par le nombre de bits de la mantisse).

− Les conventions fixent le nombre de bits et le codage utilis´es pour les champs mantisse et exposant.

− L’emplacement effectif des diff´erents champs de bits dans la m´emoire d´epend de l’utilisation qui en est faite et du processeur sur lequel se r´ealise l’implantation.

2.2.3 Exemple de repr´ esentation flottante : la norme

Dans le document ARCHITECTUREDES ORDINATEURS (Page 33-37)