Représentation des nombres
entiers
Nombres positifs
Principe
Représentation d’un nombre entier positif ou nul : binaire de
base
Nombres négatifs
Problème
comment représenter le signe -
- avec uniquements des bits
- dans un nombre de bits fixé
Bit de signe
1 bit indique le signe, le reste = le nombre en valeur absolue
exemples sur 8 bits :
inconvénients :
- comment représenter zéro ?
et
- l’addition marche plus :
Complément à deux
Complément à deux : exemples
avantage : l’addition fonctionne correctement
Complement à deux : exos
conversion
Exercice
Écrire les nombres suivants en complément à deux sur 8 bits
Exercice
Convertir les nombres suivants (écrits en complément à deux) en
décimal
Complément à deux : exos
opérations
Exercice
Faire les opérations suivantes en décimal puis en binaire complément
à deux; vérifier le résultat
Représentation des nombres
décimaux
Représentation en virgule
fixe
Principe
lorsque le nombre de chiffres en base 10 après la virgule est fixé,
on peut simplement décaler tous les nombres d’un facteur donné
exemple opérations financières en 64 bits :
- on ne se préoccupe pas des millièmes de centimes
- on a rarement à traiter des opérations dépassant plusieurs milliers
de milliards d’euros
()
=> on code les montants en centimes, ou en décicentimes, ou en
centicentimes
Exercices
Exercice
Sur 32 bits, en complément à deux, peut-on représenter en virgule
fixe les montants d’une grosse société, sachant que
- on veut une précision au millième de centimes
- on veut pouvoir manipuler des montants jusqu’à
milliards d’euros
Conversion
décimal à virgule - binaire à virgule
Principe
Conversion en binaire à virgule :
- on fait des divisions successives pour la partie entière
- on fait des multiplications successives par 2 pour la partie à
virgule
Exemple : conversion de
28,8625 en binaire
– Conversion de 28 :
– Conversion de 0,8625 :
==>
Exercices
Exercice
Représenter en binaire à virgule les nombres suivants :
Exercice
Convertir, puis calculer en binaire :
Représentation en virgule
flottante
Principe
pour les calculs scientifiques (la mole :) on peut avoir besoin de
nombres très grands ou très petits => notation scientifique
pour représenter un nombre en notation scientifique dans un nombre
fixé de bits, on utilise une représentation normalisée (IEEE 754)
en gros
- 1er bit = le signe
- e bits suivants = l’exposant
- le reste des bits = la mantisse
l’exposant peut être positif ou négatif; on pourrait le représenter
en complément à deux, mais c pas facile pour les comparaisons => on
décale de
sa valeur
Flottant 32 bits (float32)
- 1 bit de signe (1 pour négatif)
- 8 bits pour l’exposant
- 23 bits pour la mantisse (la partie après la virgule)
==> on décale l’exposant de
- exposant 3 = exposant 130
- exposant 0 = exposant 127
- exposant 10 = exposant 137
Valeur du nombre
- s = 1 ou -1 selon le bit de signe
- e est l’exposant
- m est la mantisse
Exemple :
en float32
le signe (1er bit) : nombre négatif, le premier bit est
écriture du nombre (sans le signe) en binaire :
décalage de la virgule vers la gauche, de façon à ne laisser
qu’un 1 sur sa gauche :
.
C’est un nombre flottant normalisé : la mantisse est la partie à droite
de la virgule, remplie de 0 vers la droite pour obtenir 23 bits. Cela
donne
(on omet le 1 avant la virgule, qui est implicite).
l’exposant est égal à
,
il faut le décaler et le convertir. Pour le format 32-bit IEEE 754, le
décalage est
. Donc
et
.
Résultat :
Exercices
Exercice
Ecrire
en float32.
Exercice
Combien vaut
en décimal ?
Aide : vérification et entraînement sur
https://www.h-schmidt.net/FloatConverter/IEEE754.html
Conséquences
Les valeurs stockées en virgule flottante ne sont pas
exactes, idem pour les calculs
- on ne teste pas l’égalité de deux flottants
- on fait attention aux erreurs qui s’accumulent dans les calculs