• Aucun résultat trouvé

– Principe de la représentation des nombres réels en mémoire

N/A
N/A
Protected

Academic year: 2022

Partager "– Principe de la représentation des nombres réels en mémoire"

Copied!
7
0
0

Texte intégral

(1)

CI 1 : A RCHITECTURE MATÉRIELLE ET LOGICIELLE

C HAPITRE 4 – P RINCIPE DE LA REPRÉSENTATION DES NOMBRES RÉELS EN MÉMOIRE

Savoir

– Capacité Dec - C3 : Initier un sens critique au sujet de la qualité et de la précision des résultats de calculs numériques sur ordinateur

– Principe de la représentation des nombres réels en mémoire

1 Représentation de la partie fractionnaire des réels R . . . . 1

2 Représentation de la virgule ottante . . . . 2

2.1 Procédure de conversion de réel en binaire (hexadécimale) . . . . 3

2.2 Procédure de conversion binaire (hexadécimale) en réel . . . . 4

3 Capacités de la représentation . . . . 7

1 Représentation de la partie fractionnaire des réels R

En notation décimale, les chiffres à gauche de la virgule représentent des entiers, des dizaines, des centaines, etc. et ceux à droite de la virgule, des dizièmes, des centièmes, des millièmes, etc.

Exemple 3, 3125

(10)

= 3 · 10

0

+ 3 · 10

−1

+ 1 · 10

−2

+ 2 · 10

−3

+ 5 · 10

−4

Par analogie, pour écrire un nombre binaire à virgule, on utilise les puissances négatives de 2.

Exemple

11, 0101

(2)

= 1 · 2

1

+ 1 · 2

0

+ 0 · 2

−1

+ 1 · 2

−2

+ 0 · 2

−3

+ 1 · 2

−4

= 2 + 1 + 0 + 0, 25 + 0 + 0, 0625

= 3, 3125

(10)

(2)

Le codage de la partie entière (3 dans l’exemple précédent) ne pose pas de problèmes particuliers. Pour la partie fractionnaire (0,3125), il est nécessaire d’adapter la procédure.

Métho de

Conversion d’une partie fractionnaire en binaire

1. On multiplie la partie fractionnaire par 2.

2. La partie entière obtenue représente le poids binaire (limité aux seules valeurs 0 ou 1).

3. La partie fractionnaire restante est à nouveau multipliée par 2.

4. On procède ainsi de suite jusqu’à ce qu’il n’y ait plus de partie fractionnaire ou que le nombre de bits obtenus correspond à la taille du mot mémoire dans lequel on stocke cette partie.

Exemple

Conversion de la partie fractionnaire 0,3125

0,3125 x 2 = 0,625 = 0 + 0,625 0,6250 x 2 = 1,250 = 1 + 0,250 0,2500 x 2 = 0,500 = 0 + 0,500 0,5000 x 2 = 1,000 = 1 + 0,000

On considère les parties entières de haut en bas : 0, 3125

(10)

= 0, 0101

(2)

.

Rema rque

Inconvénients

Savoir coder la partie fractionnaire d’un nombre à virgule ne suffit pas pour coder tous les nombres à virgule en binaire. En effet, la gestion d’une virgule virtuelle par programme n’est pas aisée. De plus, cette méthode ne permet pas de représenter des nombres très grands ou très petits comme le nombre d’Avogadro (6, 02214129.. · 10

23

) ou la constante de Planck (6, 62606957 · 10

−34

).

Exemple Convertir la partie fractionnaire 0,1

2 Représentation de la virgule ottante

Pour représenter des réels, nombres pouvant être positifs, nuls, négatifs et non entiers, on utilise la

représentation en virgule flottante (float en anglais) qui fait correspondre au nombre 3 informations :

(3)

− 243, 25

(10)

= −

|{z}

1

0, 24325

| {z }

2

· 10 3

|{z}

3

On appelle alors :

1. le signe (positif ou négatif ) ;

2. la mantisse (nombre de chiffres significatifs) ; 3. l’exposant : puissance à laquelle la base est élevée.

Sous cette forme normalisée, il suffit de mémoriser le signe, l’exposant et la mantisse pour avoir une représentation du nombre en base 10. Il n’est pas utile de mémoriser le 0 avant la virgule puisque tous les nombres vont commencer par 0. En faisant varier l’exposant, on fait « flotter » la virgule décimale.

C’est cette méthode que l’on va adapter pour coder les réels en binaire naturel. Il faut au préalable les écrire sous la forme (norme IEEE 754 – Institute of Electrical and Electronics Engineers) :

signe 1, mantisse x 2

exposant

Le mot binaire obtenu sera la juxtaposition de 3 parties :

Le tableau décrit la répartition des bits selon le type de précision : la taille de la mantisse (m bits) donne la précision mais suivant la valeur de l’exposant, la précision sera totalement différente.

Signe Exposant Mantisse

Simple précision – 32 bits 1 8 23

Double précision – 64 bits 1 11 52

Précision étendue – 80 bits 1 15 64

2.1 Procédure de conversion de réel en binaire (hexadécimale)

Métho de

1. Convertir en binaire les partie entière et fractionnaire du nombre sans tenir compte du signe.

2. Décaler la virgule vers la gauche pour le mettre sous la forme normalisée (IEEE 754).

3. Codage du nombre réel avec les conventions suivantes : – signe = 1 : Nombre négatif (Signe = 0 : Nombre positif ) ;

– le chiffre 1 avant la virgule étant invariant pour la forme normalisée, il n’est pas codé ;

– on utilise un exposant décalé au lieu de l’exposant simple (complément sur octet). Ainsi, on ajoute à l’exposant simple la valeur 127 en simple précision et 1023 en double précision (c’est à dire 2

n−1

− 1 où n est le nombre de bits de l’exposant) ;

– la mantisse est complétée à droite avec des zéros.

(4)

Exemple

On désire représenter le nombre - 243,25 en virgule flottante au format simple précision.

1. 243, 25

(10)

= 11110011, 01

(2)

2. 243, 25

(10)

= 1, 111001101

(2)

∗ 2

7

: décalage de 7 bits vers la gauche 3. Exposant décalé : 7 + 127 = 134

(10)

= 1000 0110

(2)

sur n = 8 bits 4. 111001101 00000000000000

S Exposant Exposant

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

C 3 7 3 4 0 0 0

Exercice

Encodage : Encoder le nombre+16,5 en simple précision.

Corrigé (Vide dans la version élève) : – Encoder en binaire le nombre à virgule

+16, 5= (10000, 1)2

– Transformer en notation scientifique (souvenez-vous que décaler la virgule revient à multiplier/diviser par 2) (10000, 1)2= (1, 00001∗24)2

– Identifier les champs – signe=0 (positif ) – exposant=4

– mantisse=00001 (on ne prend pas le 1,)

– Encoder l’exposant 4 doit être codé sur 8 bits par excès de 127=>on encode 131= (10000011)2

– Résultat final (En contrôle, écrire tous les 0 à la fin pour faire 32 bits) 0 10000011 00001000...

– Regroupement des bits par 4

0100 0001 1000 0100 0000 0000 ...

En Héxa (ne pas oublier les 0 à la fin pour faire 32 bits)

41 84 00 00

2.2 Procédure de conversion binaire (hexadécimale) en réel

On désire retrouver la valeur du nombre 44F3E0 00 représenté en virgule flottante.

On commence par placer les valeurs hexadécimales et leurs équivalents binaires dans la « structure » du flottant simple précision :

S Exposant Exposant

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

4 4 F 3 E 0 0 0

(5)

– Signe=0 : Nombre positif

– Exposant décalé : 1000 1001(2)=137(10)donc un exposant simple égal à 137−127=10(10); – Mantisse : (1,) 11100111110000000000000.

Comme l’exposant simple est égal à 10, on peut « dénormaliser » en décalant la virgule de 10 bits vers la droite puis rajouter le bit 1 invariant non stocké dans la mantisse, ce qui conduit à :

11110011111

| {z }

Partie entière 1951

, 0000000000000(2)

| {z }

P a r t i e f r a c t i o n n a i r e0

=1951(10)

Savoir

Savoir - Faire : Trouver la représentation en base dix d’un nombre à virgule flottante donné en binaire

On identifie le signe s, la mantissemet l’exposantn; on interprète chacun comme un nombre décimal en n’oubliant pas de tenir compte du décalage de 1023 pour l’exposant ; on calcule enfin la quantités m2n.

Pour un nombre codé en double précision. Si l’on note s le bit de signe, e1 . . . e11 les bits d’exposant et m1 . . .m52 les bits de la mantisse, on peut également donner l’expression directe suivante du nombre représenté :

(−1)s∗2e1...e11−1023

‚ 1+

52

X

i=1

mi1 2i

Œ

Exercice

Décodage : Décoder le nombre réel(4024000000000000)(16)qui est en double précision (puisqu’il utilise 64 bits).

Corrigé (Incomplet dans la version élève) :

– Analyser le nombre en binaire (on ne peut rien extraire de l’hexadécimale) 0100 0000 0010 0100 0000000 – Identifier les champs

– signe : 0 (positif )

– exposant : 100 0000 0010 (11 bits en double précision) – mantisse : 010000. . .

– Décoder l’exposant On trouve un exposant affiché de(10000000010)2= (1026)10Mais il faut se rappeler que pour coder cet exposant, on lui avait ajouté 1023 (sur 11 bits, codage par excès de 1023). L’exposant réel vaut donc 3.

– Écrire le nombre en binaire en notation scientifique

(1, 01∗23)2

– En déduire le résultat final :

(1, 01∗23)2= (1010)2= (10)10

(multiplier par 23 revient à décaler la virgule de 3 chiffres à droite en binaire).

Exercice

Trouver le nombre à virgule flottante représenté par le mot :

1100010001101001001111000011100000000000000000000000000000000000.

Corrigé (Vide dans la version élève) :

Le signe est représenté par 1. L’exposant est représenté par 10001000110. La mantisse est représentée par 1001001111000011100000000000000000000000000000000000. Le signe du nombre est -. Le nombre 10001000110 est égal à

(6)

Exercice

1094 et l’exposant du nombre est donc n=1094 - 1023=71. Sa mantisse est

m=1, 1001001111000011100000000000000000000000000000000000 m=1+1/2+1/24+1/27+1/28+1/29+1/210+1/215+1/216+1/217

m= (217+216+213+210+29+28+27+22+2+1)/217 m=206727

131072 Le nombre représenté est donc−206727131072∗271≈ −3, 724...1021.

Exercice

Compléter le tableau suivant :

Corrigé (Vide dans la version élève) :

(7)

3 Capacités de la représentation

En simple précision, l’exposant -127, codé 0000 0000, est réservé pour zéro et les nombres « non normalisés ». L’exposant 128 codé 1111 1111 est réservé pour coder+∞(ou−∞si signe négatif ).

Références

[1] Christophe François, Représentation de l’information, représentation des nombres.

[2] Gaëtan Pruvosthttp://perso.limsi.fr/pruvost/res/teach-doc/ieee754.pdf.

[3] Manfred GILLI, METHODES NUMERIQUES, Département d’économétrie Université de Genève, 2006.

Références

Documents relatifs

Une façon particulière : partie entière (un entier relatif) et une suite (infinie) de chiffres donnant la partie fractionnaire.. Peut-on représenter une suite de

Nombres décimaux avec nombre n fixé de chiffres après la virgule.. Avantage : on comprend bien comment

e) En utilisant la fonction de conversion des entiers positifs de la base 10 vers la base 2 de la feuille d’exercices du chapitre 1 (exercice 7 ; vous pourrez la

Est-ce que utiliser ensemble seed() et random() à chaque fois que l'on veut un nombre aléatoire (par exemple dans une boucle) est une bonne méthode pour obtenir une suite de

Scilab Valeur d’un objet = données contenues dans l’objet.. Python Valeur d’un objet = adresse

[r]

[r]

• Dans cette représentation la partie entière est représentée sur n bits et la partie fractionnelle sur p bits , en plus un bit est utilisé pour le signe. • Exemple : si n=3 et