Représentation des nombres

Transcription

Représentation des nombres
Université de Nice – Sophia Antipolis
Licence 1 Sciences & Technologies
Informatique Générale
Représentation des nombres
Jacques Farré
[email protected]
http://deptinfo.unice.fr/~jf/InfoGene
© Jacques Farré 2013
Informatique générale – représentation des nombres
1/36
Représentation des nombres
Nous sommes habitués à représenter les nombres sous forme
décimale, avec une notation de position, et en utilisant le zéro
Par exemple, nous écrivons 107 pour le nombre cent-sept, soit un multiplié
par dix au carré plus sept, ou 1×102+0×101+7×100
Mais cela n'a pas toujours été le cas
En chiffres romain : CVII, soit cent plus cinq plus deux
En chiffres sumériens (30 siècles avant JC), mélange de système décimal et
sexagésimal (en base 60) :
60+40+7=107
soixante (∆) plus quatre fois dix (•) plus sept fois un (∆)
(ces chiffres pouvaient être réprésentés par des cailloux
-calculi en latin- ou des jetons d'argile plus ou moins gros)
1 10 60
600 3600 36000
Mais dans tous les cas, 107 × 2 = 214 :
∆
••••
∆∆∆∆∆∆∆
180+30+4=214
CCXIV ou
∆∆∆
•••
∆∆∆∆
© Jacques Farré 2013
Informatique générale – représentation des nombres
2/36
Notation positionnelle
●
Procédé d'écriture des nombres,
●
●
●
chaque position est reliée à la position voisine par un
multiplicateur, appelé base
Chaque position est renseignée par un nombre fini de
symboles (qu'on appelle chiffres), représentant en
général les valeurs de 0 à base-1
Pour une base B et un nombre écrit dans cette base
CnCn-1...C2C1C0
la valeur de ce nombre est, en représentation décimale
Cn×Bn + Cn-1×Bn-1 +...+ C2×B2 + C1×B1 + C0×B0
Le nombre 325 en base 8 vaut donc 3×82 + 2×8 + 5 = 213
Ne pas confondre nombre et chiffre
© Jacques Farré 2013
Informatique générale – représentation des nombres
3/36
Compter Shadok
(extrait de wikipedia)


Le système de numération Shadok est quaternaire et
formé des nombres Ga (0), Bu (1), Zo (2), Meu (3).
C'est un système de numération par position :




quand on a quatre Shadoks, on n'a plus de nouveau
mot pour les compter, alors on les met dans une grande
poubelle, et on dit Bu pour dire que l'on a une grande
poubelle et Ga pour dire qu'il n'y a pas de shadoks à
côté, d'où Bu-Ga : 1×4 + 0:
De même, lorsque l'on a quatre grandes poubelles, on
prend une poubelle à poubelle, et on dit Bu-Ga-Ga, et
ainsi de suite : 1×42 + 0×4 + 0
Zo-Meu-Ga-Bu = 2×43 + 3×42 + 0×4 + 1
73 = 64 + 8 + 1 =1×43 + 0×42 + 2×4 + 1 = Bu-Ga-Zo-Bu
© Jacques Farré 2013
Informatique générale – représentation des nombres
4/36
Représentation binaire
Pour des raisons technologiques (passage de courant ou
non, sens de polarisation, trou ou bosse ...), les
ordinateurs actuels ne manipulent que 2 « chiffres »
Les nombres sont donc représentés en base 2, les chiffres
étant des bits (BInary digiT), que l'on note par convention
0 et 1
Un nombre s'écrivant BnBn­1...B1B0 en binaire aura
pour valeur :
Bn×2n + Bn­1×2n­1 + ... + B1×21 + B0×20
Par exemple, 1011 en binaire = 11 en décimal car
10112 = 1×23+0×22+1×21+1×20=8+0+2+1=1110
© Jacques Farré 2013
Informatique générale – représentation des nombres
5/36
Addition binaire
Puisqu'un chiffre binaire vaut 0 ou 1, toute valeur ≥ 2
impliquera une retenue
Par exemple 10112 + 11102 (1110 + 1410) :
1
+
11 01 1 1
1 1 1 0
= 1 1 0 0 1
C'est bien 2510=24+23+20
de droite à gauche :
● 1+0=1, je pose 1
● 1+1=2, je pose 0, je retiens 1
● 1
+0+1=2, je pose 0, je retiens 1
● 1
+1+1=3, je pose 1, retiens 1
● 1, je pose 1
Questions :
Donner les puissances de 2 de 20 à 215
Que vaut le nombre binaire 11111111 ? Et 11111111 + 1
Quelle est l'écriture binaire du nombre décimal 1026 ?
Évaluer approximativement le nombre binaire 10...0 (10×n zéros) ?
© Jacques Farré 2013
Informatique générale – représentation des nombres
6/36
Représentation binaire
(réponse aux questions précédentes)
Les puissances de 2 (puisque 2n=2×2n-1, il suffit de multiplier par 2)
20=1
25=32
210=1024
21=2
26=64
211=2048
22=4
27=128
212=4096
23=8
24=16
28=256
29=512
213=8192 214=16384
...
Le nombre binaire 111111112 : 128+64+32+16+8+4+2+1=25510
noter que 111111112 + 1 = 1000000002 =28 = 25610
De manière générale :
2n+2n­1+...+21+20 = 2n+1­1
La représentation binaire du nombre 102610 : 102410 + 210, soit 210+21,
donc 100000000102
10...02 (avec 10×n zéros) = 210×n
210 = 1024 et 103 = 1000, donc 210 ≈ 103, et donc 210n ≈ 103n
220 ≈106 (1 million), 230 ≈109 (1 milliard), 232 = 22×230 ≈ 4×109 (4 milliards)
© Jacques Farré 2013
Informatique générale – représentation des nombres
7/36
Une autre façon de convertir du
binaire vers le décimal
Lire les bits de gauche à droite : si les bits qu'on déjà a lu
donnent la valeur V, en lisant un bit de plus à droite, on a
soit 2V (si le bit est 0) soit 2V + 1 (si le bit est 1)
Pour le nombre binaire 10110010 (128+32+16+2=17810) :
10110010
10110010
10110010
10110010
10110010
10110010
10110010
10110010
:
:
:
:
:
:
:
:
0×2 + 1 → V=1
1×2 + 0 → V=2
2×2 + 1 → V=5
5×2 + 1 → V=11
11×2 + 0 → V=22
22×2 + 0 → V=44
44×2 + 1 → V=89
89×2 + 0 → V=178
Repose sur le schéma de Horner (en fait de Newton) :
anxn+an-1xn-1+... +a1x+a0 = 0+a0+x(a1+x(a2+...+x(an-1+xan)...)
© Jacques Farré 2013
Informatique générale – représentation des nombres
8/36
Une autre façon de convertir du
décimal vers le binaire
Repose toujours sur le schéma de Horner
anxn+an-1xn-1+...+a1x+a0 = (...(anx + an-1)x +…)x + a1)x + a0
Le reste de la division entière par x (ici par 2) donne le chiffre a0
des unités, et on recommence avec (...(anx + an-1)x +…)x+ a1
(qui est le quotient de la division entière par x) pour avoir les
autres chiffres
Représentation binaire du nombre 102610
1026 = 2 × 513, je mets un 0 à droite :
513 = 2 × 256 + 1, je mets un 1 à gauche:
256 = 2 × 128, je mets un 0 à gauche:
128=2×64, 64=2×32, 32=2×16, 16=2×8,
8=2×4, 4=2×2 :
2 = 2 × 1, 1 = 2 × 0 + 1 :
© Jacques Farré 2013
Informatique générale – représentation des nombres
0
10
010
000000010
10000000010
9/36
Octets et mots
Puisque l'information est représentée par une suite de 0 et de 1,
où commence et où fini un nombre dans la mémoire ou sur un
disque ?
Regroupement des bits par paquets de 8 : l'octet
Un octet peut coder 256 valeurs, de 0 à 255 (28 - 1)
Il sert à coder toutes sortes d'informations : nombres, caractères,
couleurs, sons ...
Mais se limiter à 256 valeurs pour les nombres, c'est trop peu !
Les octets sont eux-même regroupés, par exemple par paquets
de 2, 4 ou 8 pour les nombres : les mots
Sur 4 octets (donc 32 bits), on peut coder les entiers de 0 à 232-1
(soit un peu plus de 4 milliards : 232 ≈ 4×109 comme vu
précédemment); sur 64 bits ≈18×1018 (18 milliards de milliards)
© Jacques Farré 2013
Informatique générale – représentation des nombres
10/36
Notation hexadécimale
La représentation binaire est longue à lire pour les humains :
8 bits pour un octet, et jusqu'à 64 bits pour un nombre
On utilise aussi une notation plus concise, en base 16 ou
hexadécimale
Pour les valeurs de 0 à 9, on utilise les chiffres décimaux
Pour les valeurs de 10 à 15, on utilise les 6 premières lettres
de l'alphabet latin : A, B, C, D, E, F
Le nombre hexadécimal HnHn­1...H1H0 aura pour valeur :
Hn×16n + Hn­1×16n­1 + ... + H1×161 + H0×160
15AACF716 = 1×166 + 5×165 + 10×164 + 10×16³ +
12×16² + 15×161 + 7×160 = 22 719 73510
Comme 16 = 24, 2 chiffres héxadécimaux suffisent pour
représenter la valeur d'un octet
© Jacques Farré 2013
Informatique générale – représentation des nombres
11/36
Notations hexadécimale et binaire
16 = 24, on a donc les correspondances suivantes :
décimal
0
1
2
3
10
11
12
13
14
15
binaire
0000
0001
0010
0011
...
1010
1011
1100
1101
1110
1111
hexadécimal
0
1
2
3
A
B
C
D
E
F
15AACF716 = 0001 0101 1010 1010 1100 1111 01112
Questions
Quelles sont les représentations hexadécimale et binaire du nombre 27 10
Quelles sont les représentations binaire et décimale du nombre FB3 16
© Jacques Farré 2013
Informatique générale – représentation des nombres
12/36
Notations hexadécimale et binaire
(réponse aux questions précédentes)
Représentations hexadécimale et binaire de 2710
27 = 16 + 11, donc
1B en hexadécimal
0001 1011 en binaire (soit 16 + (8 + 2 + 1))
1 hexa  0001 binaire, B hexa  1011 binaire
Représentations binaire et décimale de FB316
15x162 + 11x161 + 3x160 = 3840 + 176 + 3 = 401910
ou encore (schéma de Horner) : (15 x 16 + 11) x 16 + 3
FB3 en binaire :
© Jacques Farré 2013
F
B
3
1111 1011 0011
Informatique générale – représentation des nombres
13/36
Codage des caractères, des
couleurs ...
Les caractères sont codés sur 1, 2 ou 4 octets
7 bits pour l'ASCII (donc 128 caractères), par exemple
4116 (A), 7A16 (z), 2016 (l'espace)
3016 (le chiffre 0)
8 bits pour l'ISO : ajoute aux 128 caractères ASCII des variantes
nationales, par exemple (ISO 8859-15 pour le français) :
C016 (À), E616 (æ)
Aussi, codages sur 16 ou 32 bits pour les alphabets non latins (avec
nombre variable de bits pour UTF-8)
Les couleurs sont (en général) codées sur 4 octets
Le plus souvent, 3 octets codent l'intensité de chacune des 3 couleurs
(rouge, vert, bleu) composant la teinte, et 1 octet est inutilisé, ou
sinon il code la transparence
Par exemple, la couleur
blanc FFFFFF
© Jacques Farré 2013
sera codée FBB097, le noir 000000 et le
Informatique générale – représentation des nombres
14/36
Décalages gauches

Ajouter un 0 à droite de la représentation d'un nombre
dans une base B revient à multiplier ce nombre par B :

Soit CnCn-1...C2C1C0 (représentant v = Cn×Bn + Cn-1×Bn-1 +...
+ C2×B2 + C1×B1 + C0×B0)

Alors CnCn-1...C2C1C00 représente (Cn×Bn + Cn-1×Bn-1 +...
+ C2×B2 + C1×B1 + C0×B0) × B + 0 soit 10×v


Donc, ajouter n zéros à droite de la représentation du
nombre revient à le multiplier par Bn


Comme 1012 = 510, alors 10102 = 1010
1012 = 510, alors 1010002 = 4010 (c'est à dire 5×23)
Cette opération est appelée décalage gauche (notée par
l'opérateur <<) : si a = 5, a << 3 = a × 23= 40
© Jacques Farré 2013
Informatique générale – représentation des nombres
15/36
Décalages droits

De manière analogue, supprimer le chiffre des unités
revient à calculer le quotient de la division entière par B :

Soit CnCn-1...C2C1C0 (représentant v = Cn×Bn + Cn-1×Bn-1 +...
+ C2×B2 + C1×B1 + C0×B0)

Alors CnCn-1...C2C1 représente q = Cn×Bn-1 + Cn-1×Bn-2 +...
+ C2×B1+C1 (v = B×q+C0)



Comme 10112 = 1110, alors 1012 = 510
Donc, supprimer n chiffres à droite de la représentation
d'un nombre revient à calculer son quotient dans la
division entière par Bn : 1010102 = 4210 et 101010 = 5
Cette opération est appelée décalage droit (notée par
l'opérateur >>) : si a = 42, a >> 3 = a ÷ 23= 5
© Jacques Farré 2013
Informatique générale – représentation des nombres
16/36
Masques



On peut faire des opérations bit à bit sur une
représentation binaire d'un nombre
Un masque est un nombre binaire qui permet de faire
une telle opération avec un autre nombre
Soit le nombre binaire 10110111 et le masque 00111100



Le ET permet de ne retenir que certains des bits :
ce masque permet de ne garder que les 4 bits du milieu
10110111  00111100 = 00110100
Le OU permet de mettre des bits à 1 :
10110111  00111100 = 10111111
Le XOR permet d'inverser les bits
10110111  000111100 = 10001011
© Jacques Farré 2013
Informatique générale – représentation des nombres
17/36
Masques et décalages


Masques et décalages permettent ainsi de ranger
plusieurs (petits) nombres dans un seul mot
Par exemple, pour représenter les heures (0-12, donc 4
bits car 24=16), minutes et secondes (0-59, 6 bits car
26=64), on peut n'utiliser que 16 bits

3h 24mn 15s représenté comme 15 24 3
6 bits 6 bits 4 bits
15×210 + 24×24 + 3 soit (15 << 10) OR (24 << 4) OR 3


15×210 + 24×24 + 3 = 15747 = 001111 011000 0011

Pour avoir les heures : 15747  00000000000011112

Pour avoir les minutes : (15747  00000011111100002) >> 4

Pour avoir les secondes : (15747  11111100000000002) >> 10
On peut aussi décaler d'abord et masquer ensuite

Pour avoir les minutes : (15747 >> 4)  0000000000001111112
© Jacques Farré 2013
Informatique générale – représentation des nombres
18/36
Les nombres négatifs
Avant l'utilisation des bouliers (à partir du 13e siècle), les chinois
comptaient à l'aide de baguettes (dès -700) dans un système décimal
de position en virgule flottante (l'écriture des nombres était inspirée
de l'arrangement de ces baguettes)
Les baguettes étaient orientées verticalement pour les puissances de la forme
102p et horizontalement pour celles correspondant à 102p+1,
par exemple 256
(ou 25600, ou 2.56, mais pas 2560 ni 25.6)
Le 0 était implicite : un espace entre 2 «chiffres» de même orientation :
représente 206 (ou plus exactement 206102p), mais pas 26
On trouve des traces des nombres négatifs dans des sources du 3e siècle
La couleur des baguettes ou de l'encre (noire ou rouge) indiquait si le nombre
était négatif ou positif
Mais c'est d'Inde (6e siècle) puis de Perse (9e siècle) que vient à l'occident
(vers le 15e siècle) la notion de quantité négative (notion encore rejetée par
certains mathématiciens à la fin du 18e siècle !)
© Jacques Farré 2013
Informatique générale – représentation des nombres
19/36
Les nombres négatifs pour les
ordinateurs
Vous écrivez -17 sans vous posez de question
Vous pourriez écrire en binaire -10001 (puisque 1710=100012)
Mais les machines ne connaissent que 0 et 1, pas le signe
-
Donc par convention, le bit à gauche représente le signe S
(0 si positif ou nul, 1 si négatif) : les nombres sont représentés sur
un nombre N de bits (y compris les 0 non significatifs)
On pourrait imaginer qu'un nombre (par exemple sur 8 bits) aurait la
représentation suivante
1 bit
7 bits
exemple pour -17
1
0010001
Pour additionner 2 nombres de même signe, pas de problème ; mais
s'ils sont de signe différent ?
En décimal, pour -17 + 35, ce n'est pas si simple (on calcule 35-17)
Ce ne serait pas mieux en binaire (et il faudrait donc un circuit électronique
compliqué pour faire un additionneur)
Il faut donc trouver une autre représentation
© Jacques Farré 2013
Informatique générale – représentation des nombres
20/36
Les nombres négatifs pour les
ordinateurs (complémentation à 1)
Si on inverse les bits,
1710 = 0 0010001
-1710 = 1 1101110
On aimerait pouvoir additionner le bit de signe comme les autres
(pour simplifier les circuits)
Malheureusement, 1710+(-1710) =11...12, et 1710-1710 = 00...02
Donc 0 a deux représentations : soit 00...0, soit 11...1
ce qui ne facilite pas la comparaison d'un nombre à 0
Encore malheureusement, 5–22 donne -18, et -17+22 donne 4 ; il
manque 1, ce n'est pas encore tout à fait ça
On peut aussi remarquer que -0+1 donne +0 (on perd la
dernière retenue car il n'y a pas de bit à gauche pour la recevoir)
Il faut encore trouver une autre représentation
© Jacques Farré 2013
Informatique générale – représentation des nombres
21/36
Les nombres négatifs pour les
n
ordinateurs (complémentation à 2 )
Donc si
17 : 00010001,
essayons avec -17 : 11101110 + 1, soit 11101111
C'est bien le résultat de 5 – 22 (c'est à dire 5+(-22)), et
on peut vérifier que -17+22 = 00000101, c'est à dire 5
Bingo !
Cette représentation, appelée complémentation à 2n
(ou simplement complémentation à 2), est celle des
ordinateurs actuels
Principe : inverser les bits et ajouter 1
Par exemple sur 8 bits :
1010 = 000010102, -1010 = 111101102
100111012 = -9910, 9910 = 011000112
Intervalle des nombres signés sur n bits : [-2n-1 : 2n-1-1]
© Jacques Farré 2013
Informatique générale – représentation des nombres
22/36
Les nombres négatifs pour les
ordinateurs
La complémentation à 2 permet des calculs modulo 2n :



on a vu que sur 8 bits -10 s'écrit 11110110
mais c'est aussi la représentation binaire (non
signée) de 246 : 246 + 10 = 256 ≡ 0 (modulo 256)
en règle générale, si k est un nombre positif, la
représentation sur n bits de -k est la même que
celle de 2n - k
On en déduit par exemple que la représentation (sur 8 bits)
 de -1 est la même que celle de 255 (11111111)
 celle de -128 la même que 128 (10000000)

celle de -123 la même que 256-123=133 (10000101)
© Jacques Farré 2013
Informatique générale – représentation des nombres
23/36
Les nombres signés et non signés
dans les ordinateurs
11...1 (-1 en signé) ;
c'est aussi le plus
grand nombre en
non signé : 2n-1
en nombres
non signés,
2n-1 + 1 = 0 !
00...0 (0)
00...1 (1)
-K ou 2n-K
K
<0
(-maxint) 10...1
(minint = -2n-1, le
plus petit négatif)
10...0
© Jacques Farré 2013
≥0
en nombres signés,
2n-1-1 + 1 = -2n-1 !
01...1 (le plus grand
positif signé (maxint)
= 2n-1-1
Informatique générale – représentation des nombres
24/36
Nombres négatifs et décalages


Les nombres négatifs en complément à 2 conservent
les propriérés arithmétiques pour les décalages
Par exemple, pour des nombres signés représentés
sur un octet :

-15 : 111100012
-15 << 3 : 100010002 (-120), et -120 = -15× 23

Pour les décalages droits, on étend le bit de signe

-125 : 100000112,
-125 >> 3 : 111100000112, c'est à dire -16, et -125
(car – 125 = -16 × 8 + 3 en division euclidienne)
© Jacques Farré 2013
Informatique générale – représentation des nombres
÷ 8 = -16
25/36
Avez-vous bien compris ?

On représente les nombres sur 8 bits

Quel serait la représentation de 97 ?

Quelle serait la représentation de -97 ?


Soit le nombre signé 10010110 : quelle valeur
représente-il ?
Quelle serait la représentation de 200 ?
© Jacques Farré 2013
Informatique générale – représentation des nombres
26/36
Les réponses




Quel serait la représentation de 97 : 64+32+1, donc
01100001
Quelle serait la représentation de -97 :
 Soit on fait la complémentation : 01100001 + 1 =
10011111
 Soit on remarque que c'est la même que celle de 256
– 97 = 159 (=128 + 31, donc 10011111)
Soit le nombre signé 10010110 : quelle valeur représente-il ?
 Soit on fait la complémentation : 01101001 + 1 =
01101010 (64+32+8+2=106, donc c'est -106)
 10010110 représente (si non signé) aussi
128+16+6=150, donc c'est 150-256 = -106
Quelle serait la représentation de 200 ? Impossible sur 8 bits,
l'intervalle représentable est [-128:+127]
© Jacques Farré 2013
Informatique générale – représentation des nombres
27/36
Représentation des nombres réels
en virgule flottante
On peut représenter un nombre avec une mantisse et un
exposant : vous connaissez la notation scientifique :
1,234 × 103 (=1234)
Imaginez que la mantisse et l'exposant doivent être représentés
sur un nombre fixe de chiffres (respectivement 5 et 2 par
exemple), et qu'il faille ôter 50 de l'exposant (le biais, pour avoir
des exposants négatifs) ; pour 1234, on aurait alors
mantisse exposant
12340 53
soit (1+2/10+3/102+4/103)×1053-50
0,0005 (5×10-4) serait représenté par 50000 46
Dans toute base B, supprimer n chiffres à droite
revient à diviser par Bn et ajouter n zéros revient à
multiplier par Bn
© Jacques Farré 2013
Informatique générale – représentation des nombres
28/36
Approximation et nombres réels
en virgule flottante
On ne peut pas représenter tous les nombres réels
en virgule flottante à cause de la taille limitée pour
la mantisse et l'exposant
Avec une mantisse de 5 chiffres et un exposant de 2
le plus grand nombre représentable est 99999 99
soit 9,9999 × 1099-50 ≈ 1 × 1050
le plus petit (strictement positif) est :
soit (1/104)×10-50=10-54
00001 00
Il est clair qu'on ne peut pas représenter exactement
1,23456, puisque la mantisse ne peut avoir que 5 chiffres :
il devra être arrondi, par exemple à 1,2346
L'utilisation des nombres flottants peut produire des
erreurs de calcul dues à ces arrondis
© Jacques Farré 2013
Informatique générale – représentation des nombres
29/36
Représentation des nombres réels
binaires en virgule flottante
Les machines utilisent une représentation flottante
pour les nombres réels, mais en binaire
La représentation binaire en virgule flottante est analogue
à celle en décimale, mais en base 2 évidemment
Avec par exemple une mantisse sur 5 bits, un exposant
sur 3 bits et un biais B valant 3
mantisse exposant
10110 110
= (1+1/4+1/8)×26-3=11,
ou (autre façon de calculer) : (11×2-3)×26-3
(puisque 10112=1110, 1,01102=1110×2-3)
© Jacques Farré 2013
Informatique générale – représentation des nombres
30/36
Représentation des nombres réels
binaires en virgule flottante
La mantisse b0b1...bk représente le nombre rationnel
m = b0+b1/2+b2/22+...bk/2k ,
(ou, si n est le nombre binaire b0b1b2...bk , m = n / 2k-1)
L'exposant xnxn-1...x1x0, représente l'entier x=xn2n+...x12+x0
La valeur représentée par le couple (m,x) est m.2x-B
En forme normalisée, on a toujours b0 = 1
La norme IEEE 754 définit 2 formats (un peu plus compliqués que le modèle cidessus, car les mantisses sont signées)
• Simple précision : mantisse sur 23 bits, exposant sur 8, B=127
• Double précision : mantisse sur 52 bits, exposant sur 11, B=1023
• Calculs faits en précision étendue : mantisse sur au moins 64 bits, exposant
sur au moins 15
© Jacques Farré 2013
Informatique générale – représentation des nombres
31/36
Représentation des nombres réels
attention aux pièges
La représentation entière ne permet de compter que jusqu'à
l'ordre de grandeur 4×109 (sur 32 bits)
La représentation flottante permet de représenter les nombres
entre les ordres de grandeur 10-37 et 1037 (sur 32 bits) ou 10-308 et
10308 (sur 64 bits) : on serait tenté de n'utiliser qu'elle !
Mais cette faculté d'exprimer de très petits ou de très grands nombres
se paye par une approximation puisque seuls peuvent être représentés
exactement les nombres de la forme (b0+b1/2+b2/22+...bm/2m) ×2x-B
On a donc des erreurs d'arrondi : par exemple sur 32 bits,
1000 × (1/3000 + 1/3000 + 1/3000) ≠ 1
Un même nombre a plusieurs représentations flottantes : sur n
bits, on représente moins de nombres réels flottants différents
que de nombres entiers !
11000...0 | 0...010
01100...0 | 0...011
m.2x = m/2 × 2x+1, et par exemple
© Jacques Farré 2013
(1+1/2)×4=6
Informatique générale – représentation des nombres
(1/2+1/4)×8=6
32/36
Avez vous bien compris ?
Supposons qu'on utilise une mantisse de 2 bits et un
exposant de 2 bits avec B=0
Questions :
Quelles sont les nombres qui peuvent être représentés ?
Combien de ces nombres sont différents ?
Quel est le résultat de l'addition flottante 4 + 1 ?
Combien d'entiers peuvent être codés sur 4 bits ?
Quel est le résultat de l'addition entière 4 + 1 ?
© Jacques Farré 2013
Informatique générale – représentation des nombres
33/36
Les réponses
Les 4 configurations de la mantisse sont
00 (0),
01 (1/2),
10 (1),
11 (3/2)
et l'exposant représente 1 (20), 2 (21), 4 (22), 8 (23)
Les nombres représentables sont donc, avec un biais B de 0 :
0
1/2
1
0
1
2
0
2
4
0
4
8
soit 10 nombres différents
3/2
(exposant = 0)
3
(exposant = 1)
6
(exposant = 2)
12
(exposant = 3)
seulement : 0, 1/2, 1, 3/2, 2, 3, 4, 6, 8, 12
Notez que, puisque 6=1102, sa mantisse (sur 2 bits) est 11 (on garde
bien sûr les bits de plus fort poids) et son exposant est 2 (car la
mantisse représente la valeur 1+1/2, ou plus simplement, pour passer
de 1102 à 1,12, on a dû décaler la virgule de 2 à gauche)
On voit que 5 = 4 + 1 n'est pas représentable, même si 1 et 4 le sont :
comme 5 = 1012, on perd le 1 de droite avec une mantisse sur 2 bits,
et il sera approximé par 4 ou 6 ;
Sur 4 bits, on code tous les entiers de 0 à 15, donc on aura bien 4+1=5
© Jacques Farré 2013
Informatique générale – représentation des nombres
34/36
Avez vous vraiment bien compris ?
On prend une mantisse m sur 5 bits et un exposant x sur
3 bits avec un biais de 4 : le nombre représenté vaut
(b0+b1/2+b2/22+b3/23+b4/24)×2x-4
10100 011
1012 = 5, donc 5×2-2×23-4 = 5/8, ou si vous
préférez vous compliquer la vie, (1+1/4)×23-4 = 1/2+1/8=4/8+1/8
00110 110 3×2-3×26-7 = 3/24, ou (1/4+1/8)×2-1=1/23+1/24
Pour représenter 12 : 11000 111 puisque la mantisse représente
12×2-3, il faut un exposant de 3 (+ 4 de biais, donc 7)
Pour représenter 0,3125 : 10100 010 0,3125=5/16, et puisque la
mantisse vaut 5×2-2, l'exposant doit être -2 (+4 de biais, donc 2)
© Jacques Farré 2013
Informatique générale – représentation des nombres
35/36
Multiplication et addition flottante

Vous savez que a.kn
×
b.km = a.b.kn+m
Il suffit donc de multiplier les mantisses et d'additionner les
exposants (en retirant 1 fois le biais) : 3/2 × 5/8 = 15/16

En supposant un bias de 3
11000 011
11000

×
10100 010
×
=
11000
00000
11000
-------------1111000 (15/8
11110 010
10100 =
011+010-011 = 010
l'exposant vaut donc
2-3
×
2-1)
Pour a.kn + b.kn-p = (a+b.k-p).kn : ajuster les exposants
(et une des mantisses en conséquence), puis
additionner les mantisses : 3/2 + 5/8 = 17/8
11000 011
© Jacques Farré 2013
×
01010 011
=
10001 011
Informatique générale – représentation des nombres
36/36