Vous êtes sur la page 1sur 42

REPUBLIQUE DU MALI

MINISTERE DE L'ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE

UNIVERSITE PRIVE DU MALI

INTEC-SUP

Support de cours: Electronique Numérique

Niveau: Licence

Chargé de cours: Dr-Ingr. SALIF NABOUNA DEMBELE

2022/2023
Chapitre 2: Codage des nombres dans les machines
numerique
Plan
1. Représentation des nombres entiers positifs

2. Représentation binaire des entiers signés

3. Représentation des nombres réels dans un calculateur

2022/2023
1-1 Représentation dans une base b

Le chapitre précèdent définissait la décomposition d’un nombre entier dans une base quelconque: en informatique,
certaines bases sont privilégiées :
— la base 2 qui permet de représenter les nombres binaires, qui peuvent être stock ́es dans une machine;
— la base 16 qui permet de condenser l écriture en base 2 en donnant la valeur hexadécimale d’un octet seulement
en lieu et place de 8 bits ;
— la base 10, qui représentent les nombres décimaux pour nous les humains...
Il faut savoir passer d’une base `a l’autre sans difficulté...
1-2-Representation des nombres entiers positifs
En mathématiques, les nombres entiers comme les nombres réels, sont en nombre infini. En informatique un nombre
est représenté par une succession de bits qui ne peut dépasser la capacité limite des mémoires qui les stockent.
Comprenons déjà que si l’on veut manipuler des nombres entiers très grands dans un ordinateur, il faudra une
capacité de mémoire adaptée.
2022/2023
 Representation sur n bits
➀ Avec n bits, combien d'états possibles peut-on coder ?
➁ Avec n bits, quels entiers positifs pouvons-nous représenter ?
Ainsi avec un octet, soit 8 bits, on peut coder les entiers allant de
0 = (00)16= (0000 0000)2 à 255 = (FF)16 = (1111 1111)2.

 Et le grand gagnant est...


Dans une architecture 32 bits, on peut stocker des nombres comportant 32 bits; quel est alors le plus grand entier que
l’on peut représenter ?
Le plus grand entier que l'on peut stocker est alors: 01111111111111111111111111111111 (un zéro, suivi de 31
uns). Si l'on traduit ces nombres en base 10, on en déduit que la plus grande valeur que l'on peut stocker sur
un entier 32 bits est de 231-1, c'est à dire 2147483647 (un peu plus de deux milliards)
De façon plus générale, sur une architecture de n bits:
— Le plus grand entier positif représentable est 2n−1−1 car le premier représenté est 0;
— le plus petit négatif est −2n−1 2022/2023
1-3 Addition de binaires

 Addition de nombres binaires non signés:

L’addition de nombres binaires répond au même algorithme utilise en base 10 ; il faut savoir prendre en compte la
retenue:

Example: Poser les opérations suivantes: (111) + (010) et (0101 0001) + (1011)

Il faut d’abord choisir le nombre de bits à utiliser pour représenter


les deux nombres.
•L’addition se fait bit par bit.
•La somme peut nécessiter un bit de plus que celui des opérandes.

2022/2023
 On appelle complément à 1 d’un nombre binaire, le nombre binaire obtenue en
changeant les 0 en 1 et les 1 en 0. Pour l’exemple, (1001) devient (0110)
2- Représentation binaire des entiers signés
2-1 Le Binaire signé: Le bit de poids le plus fort
représente le signe du nombre

Le bit le plus à gauche du mot binaire est celui qui va représenter le signe. Signe négatif
si ce bit vaut 1, signe positif quand ce bit vaut 0. Si on admet que le nombre peut
représenter des valeurs négatives, on parle de nombres "signés".
Observons d’abord le fait que les nombres codés en machine ont une dimension fixe :
 Sur papier , les nombres ont des dimensions variables :
* L'addition de deux nombres de 2 chiffres donne un nombre de 2 ou 3 chiffres.
* La multiplication de deux nombres de 2 chiffres donne des nombres de 3 ou 4
chiffres.
 En machine par contre, les nombres ne sont pas extensibles. Ils ont des dimensions
fixes. C'est exactement ce que nous avons avec certain compteurs.
2022/2023
2-2 Comment calculer les codes des nombres négatifs ?
Le calcul se fait en deux étapes:
1° Calcul du complément à 1 = Remplacer tous les 0 par des 1 et tous les 1 par des 0.
2° Calcul du complément à 2 = Ajouter 1 au complément à 1
 Décimal −> binaire signé:  Binaire signé−> Décimal :
1 − Codage du signe 1 − Détermination du signe: (1 0 1)
(−3)10 => bit de poids le plus fort égal à 1 => nombre négatif
2 − Codage en binaire naturel de la valeur absolue 2 − Isoler la valeur absolue,
substitution des 0 par des 1 et des 1 par des 0, ajout de 1 substitution des 0 par des 1 et des 1
Ainsi (3)10 = (11)2 , 11=>00; 00+1= 01, par des 0, ajout de 1. 01 =>10,
D’ou (−3)10 = (1 01)BS ajout de 1 => 11, soit −3
2-3 Changer le signe d’un nombre en complement à deux
• Pour changer le signe d'un nombre, on inverse chaque bit et on ajoute 1.

• Ceci correspond à calculer 2N – n, où n est le nombre dont on veux changer le signe et N est le nombre de bits pour
le représenter. 2022/2023
Complément à deux du nombre −81(10) sur un
octet. Vérification de −81(10) + 81(10) = 0(10) .

2-4 Extension du signe


• Pour augmenter le nombre de bits utilisés pour
représenter un nombre binaire signé, il faut faire
l’extension du signe correctement.
• L’extension du signe consiste à répéter le bit de signe du
nombre autant de fois que nécessaire pour obtenir le
nombre de bits désirés.
2022/2023
2-5 Addition de nombres binaires signés

Il faut d’abord choisir le nombre de bits à utiliser pour représenter les deux nombres, en faisant l’extension du signe
correctement.
• L’addition se fait bit par bit. On laisse tomber toute retenue finale.
• Il ne peut pas y avoir de débordement si les deux nombres ont un signe différent.
• Un débordement peut se produire si les deux nombres ont le même signe. On le détecte en observant que la
somme a un signe différent.
• On garantit qu’un débordement n’aura pas lieu en ajoutant un bit aux opérandes avant de faire l’addition.

Erreur: OK.
+14 ne peut pas être +14 est représenté
représenté sur 4 bits. correctement sur 5 bits.

2022/2023
2-6 Soustraction de nombres binaires signés

Une approche simple consiste à procéder comme pour l’addition, mais on change le signe du nombre à soustraire en
inversant ses bits et en ajoutant 1.
• Un débordement peut avoir lieu. Les règles de détection sont similaires à celle de l’addition.
• On garantit qu’un débordement n’aura pas lieu en ajoutant un bit aux opérandes avant de faire la soustraction.

2-7 Multiplication et division par une puissance de deux


Dans toute base, la multiplication par une puissance de la base revient à décaler les chiffres vers la gauche.
• La division par une puissance de la base revient à décaler les chiffres vers la droite.
• En arithmétique entière, pour la division on ne garde que la partie entière du résultat.
2022/2023
 Multiplication par 2k
Multiplier un nombre binaire par 2k consiste à décaler la virgule de k positions vers la droite, ou à ajouter k "0" au
niveau des bits de poids faible dans le cas des entiers. Par exemple, soit N = (18)10 = (10010)2 . La multiplication de
N par 2 donne N.2(10) =36(10) = (100100)2, et sa multiplication par 4, N.4(10) = 72(10) = (1001000)2 . Le mécanisme est
le même que celui appliqué lors de la multiplication d’un nombre décimal par 10k .
 Division par 2k
Le mécanisme est inverse de celui de la multiplication. Diviser un nombre binaire par 2k consiste à décaler la virgule
de k positions vers la gauche, ou à enlever les k bits de poids faible dans le cas d’une division entière. Par exemple,
soit N = 37(10) = 100101(2). La division entière de N par 4 donne N / 4(10) = 9(10) =1001(2), tandis que la même division
considérée sur des réels donne N /4(10) =9, 25(10) = 1001,01(2) .
 Cas général
La multiplication de deux nombres binaires de n bits fournit un résultat sur 2n bits. Lorsque les nombres ne sont pas
signés, le principe est le même qu’en décimal et fait intervenir des produits partiels de bits, des additions et des
décalages. A titre d’exemple, la multiplication de 2 nombres de 4 bits non signés, A et B, se décompose comme suit :
2022/2023
La multiplication de A par B se déroule en trois étapes:
• Multiplication de A par chacun des symboles de B : en base 2, la multiplication de A par le symbole Bi revient à
faire un ET logique entre chaque symbole de A et Bi ,
• Décalage de A×Bi de i rangs vers la gauche,
• Addition des résultats de l’étape précédente.

Lorsque les nombres à multiplier sont signés, le principe de l’opération devient plus complexe et fait appel à des
algorithmes non traités dans ce cours (cf. par exemple [Aum96]).
2022/2023
• Si le multiplicande est positif, pas de changement,
• Si le multiplicande est négatif, tous les produits partiels sont négatifs ou nuls. Il faut
étendre les produits partiels non nuls à 2n bits en rajoutant des 1 sur les bits de poids forts.
Exemple:

2-8 Codage des nombres à virgule

● Un nombre décimal est composé d'une partie entière et d'une partie fractionnaire après la

virgule.
● En base B, ce nombre X s'écrit : (X)B = an an-1 ...a0,b1 ...bm
Il se convertit en décimal en : (X)10 = anbn+...+a0b0,b1B-1+...+bmB-m .
2022/2023
Exemples:

● 128,75 = 1x102 + 2x101 + 8x100 + 7x10-1 + 5x10-2 .

● (101,01)2 = 1x22 + 1x20 + 1x2-2 = 1x4 + 1 + 0,25 = 5,25


● (AE,1F)16 = 10x161 + 14x160+1x16-1+15x16-2 = 160 + 14 + 0,0625 + 0,5859375 = 174,12109375

2-8-1 Conversion des nombres à virgule en base B


● Cela n'est faisable le plus souvent que de manière approchée, il faudra donc donner la précision voulue.
● Pour la partie entière, on fait comme pour les entiers
● Pour la partie décimale:
– On multiplie la partie entière par B
– On note la partie entière obtenue
– On recommence avec la partie décimale restante
– On s'arrête quand la partie décimale est nulle ou quand la précision souhaitée est atteinte

2022/2023
La partie décimale est la concaténation des parties entières obtenues dans l'ordre de leur
calcul. Exemple: conversion de 28,8625 en binaire
– Conversion de 28: (11100)2 .
– Conversion de 0,8625:
● 0,8625 x 2 = 1,725 = 1 + 0,725
● 0,725 x 2 = 1,45 = 1 + 0,45
● 0,45 x 2 = 0,9 = 0 + 0,9
● 0,9 x 2 = 1,8 = 1 + 0,8
● 0,8 x 2 = 1,6 = 1 + 0,6
● 0,6 x 2 = 1,2 = 1 + 0,2
● 0,2 x 2 = 0,4 = 0 + 0,4
● 0,4 x 2 = 0,8 = 0 + 0,8

28,8625 peut être représenté par (11100,11011100...)2


2022/2023
● La représentation précédente ne permet pas de représenter des nombres très petitement
proche de zéro ou très grands.
2-8-2 Codage en virgule fixe
Dans cette représentation, les nombres réels sont représentés par des entiers, après avoir décidé d’un facteur
d’échelle k qui est une puissance de la base dans laquelle on écrit les entiers. Autrement dit, un bloc de n bits est
considéré comme un nombre dont la partie entière et le signe sont codés sur n −k bits, et dont la partie fractionnaire
est codée sur k bits. La résolution d’une telle représentation est de 2−k . L’addition de deux nombres réels en virgule
fixe (s’ils possèdent le même facteur d’échelle k) revient à additionner les deux entiers qui représentent ces nombres.
Ce codage est surtout utilisé dans les processeurs de traitement de signal (DSP) où les exigences de rapidité sont
primordiales. En revanche, la dynamique de cette représentation est assez limitée : pour un format sur n bits avec k
bits après la virgule, la dynamique est de (2n −1 )/2k.
2-8-3 Codage des décimaux en virgule flottante
Dans le cas précédent, le facteur d’échelle était fixe. Dans le cas du codage en virgule flottante, le facteur d’échelle
peut varier au cours du calcul. On utilise l’écriture semi-logarithmique suivante: N =S M be. 2022/2023
– s: signe du nombre
– M: mantisse, écrite en virgule fixe en base b, sur p chiffres, de type x0 x1 ...xi,xi+1 ..xp-1
où xi , pour i entre 0 et p-1, est entre 0 et b-1
– e: exposant
Le nombre flottant N est alors dit de précision p.
● be correspond au facteur de mise à l'échelle => il est explicite
● La représentation n'est pas unique.
Par exemple, avec b=10, et en précision 4, le nombre 2,617 peut se présenter de différentes manières :
– 2617 x 10-3  Nécessité de normaliser l'écriture pour qu'elle devienne
– 261,7 x 10-2 unique
– 26,17 x 10-1  Rôle de la norme IEEE754, publiée en 1985 et révisée
– 2,617 x 100 en 2008
– 0,2617 x 101

2022/2023
2-8-4 Code Gray ou code binaire réfléchi
Le nom du code vient de l'ingénieur américain Frank
Gray qui publia un brevet sur ce code en 1953, mais le code lui-même est plus ancien.
Le code de Gray, également appelé code Gray ou code binaire réfléchi, est un type
de codage binaire permettant de ne modifier qu'un seul bit à la fois quand un nombre
est augmenté d'une unité. Cette propriété est importante pour plusieurs applications.
 Règle de formation du code Gray à partir du binaire pur
Le code de Gray est un codage binaire, c'est-à-dire une fonction qui associe à chaque
nombre une représentation binaire. Cette méthode est différente du codage binaire
naturel. Le tableau suivant montre partiellement le codage sur 4 bits (seules les 8 Code de Gray dans un codeur
premières valeurs sont présentées, les huit suivantes avec le premier bit à 1 n'y sont optique rotatif absolu à 13
pistes. Les treize pistes
pas). apparaissent sur tout le tour de
la couronne située au niveau
des deux vis cruciformes.
2022/2023
La différence principale entre
les deux est le fait que le
codage de Gray de deux
nombres consécutifs ne
diffère que d'une position. Par
exemple 5 est codé par 0111,
et 6 est codé par 0101: seul le
deuxième bit change.
 Méthodes d'incrémentation
Il existe plusieurs méthodes pour incrémenter un nombre écrit selon le code de Gray (c'est-à-dire lui ajouter 1).
 Inverser pour obtenir un nouveau nombre
Pour passer d'une ligne à la suivante, on inverse le bit le plus à droite possible conduisant à un nombre
nouveau. Cette méthode présente l'inconvénient de devoir connaître tous les codes de Gray qui précédent.
2022/2023
 Selon la parité
Une autre méthode de calcul permettant de passer d'un nombre de Gray au suivant, et
qui présente l'avantage de ne pas nécessiter de connaître l'ensemble des nombres précédents est la suivante:
• si le nombre de 1 est pair, il faut inverser le dernier chiffre.
• si le nombre de 1 est impair, il faut inverser le chiffre situé à gauche du 1 le plus à droite.
Exemple d'incrément basé sur la parité

 Calcul de moitié et double


Une méthode de calcul de la moitié d'un nombre pair
consiste à éliminer le dernier chiffre et donc décaler
les autres chiffres d'une position à droite.
2022/2023
Une méthode de calcul du double d'un nombre consiste à insérer un chiffre

supplémentaire à droite et donc décaler les autres chiffres d'une position à gauche.
si le nombre de chiffres 1 est pair, le nombre est pair, il faut insérer un zéro à droite
si le nombre de chiffres 1 est impair, le nombre est impair, il faut insérer le chiffre 1 à droite.

2022/2023
Exemples

Exemple 1 de la conversion de (89)10 en base 2. L'application de l'algorithme précédent


donne (89)10 = (1011001)2. En effet:

Le résultat final est bien sûr identique (89)10 = (1011001)2


2022/2023
Exemple 2: E1A3D = (E x 164) + (1 x 163) + (A x 162) + (3 x 161) + (D x 160)
Comme précédemment, on peut également faire un autre genre
de lecture, en faisant les calculs avec des nombres décimaux :
E x 16 = 14 x 16 = 224 ; 224 + 1 = 225
225 x 16 = 3 600 ; 3 600 + A = 3 600 + 10 = 3 610
3 610 x 16 = 57 760 ; 57 760 + 3 = 57 763
57 763 x 16 = 924 208 ; 924 208 + D = 924 208 + 13 = 924 221
E1A3D en hexadécimal est donc égal à 924 221 en décimal.

Exemple.
Effectuer les conversions suivantes:
a. (7852)10 en base hexadécimal puis en binaire.
b. (1101001011)2 en hexadécimal puis en décimal
c. (2EA)16 en binaire puis en décimal.
2022/2023
Correction.
1. Conversion en base hexadécimal

soit (7852)10 = (1EAC)16


La conversion vers la base 2 est immédiate:
(1EAC)16 = (1 1110 1010 1100)2

2. Vers la base hexadécimale

2022/2023
3-Representation des nombres réels dans un calculateur

Dans les calculateurs, deux représentations sont utilisées pour représenter les nombres fractionnaires: le codage en
virgule fixe et le codage en virgule flottante. On a tendance à utiliser les instructions et les données, ce qui constitue
l’information. Les données peuvent être de type caractère ou numérique. Pour les données numériques on peut voir
leur distinction d’après le schéma ci-dessous
En hardware, on peut facilement générer des nombres par
exemple:
En langage C, on écrit:
Unsigned short a; // unsigned 16 bit intege
En Verilog on écrit:
Reg[15:0] a; // unsigned 16 bit integer

2022/2023
3-1 Évolution des machines à calculer

 Tables à calcul  Bouliers

Ces tables de calcul furent développées une amélioration du procédé de


calcul sur table qui donna
probablement en Mésopotamie naissance aux bouliers
(l'histoire antique) et n'étaient à l'origine
Le premier progrès en ce
que des lignes tracées dans le sable.
sens a été réalisé en 1620. C
 Bâtonnets de Neper et réglettes multiplicatrices est la à calculer.
permettait à
l'utilisateur de
s'épargner
l'apprentissage
des tables de
multiplications
2022/2023
 Premières machines mécaniques
 Prototype de Da Vinci  Machine de Schickard

C'est en 1967 que furent retrouvés à la


bibliothèque nationale d'Espagne à C'est en 1623, que fut construite la toute première
Madrid deux dessins jusqu'à présent machine à calculer mécanique. Cette réalisation est
inconnus réalisés par Leonardo Da l'oeuvre de Wilhelm Schickard (1592-1635), un Allemand
Vinci représentant ce que l'on croit être né d'une famille modeste
le premier prototype documenté d'un
machine à additionner.
 Évolution des machines mécaniques

2022/2023
 Le clavier
 Arithmomètre de Thomas

C'est donc en pleine révolution industrielle, aidé par


les progrès techniques, que le français Charles-Xavier
Thomas de Colmar réussit à fabriquer la première
machine que l'on peut qualifier de véritablement
pratique: l'Arithmomètre. Bien que quelques progrès Le premier calculateur à touches
mineurs aient eu lieu au cours du 18ème siècle, les connu, datant de 1850, est
machines de Thomas, produites de 1821 à 1878, ont l'oeuvre de D.D. Parmelee est
réellement marqué l'histoire du calcul mécanique en n'était définitivement pas de taille
devenant les premières machines commercialisées de à compétitionner avec les
façon importante et ce, avec succès. machines du temps
2022/2023
 La multiplication directe
 L'imprimante

C'est la machine construite par le français Léon Bollée,


en 1888, qui fut vraiment la première réalisation
pratique d'une machine à multiplication directe.

Le premier prototype connu de machine à


calculer permettant l'impression date de
1870. Crée par Barbour, ce prototype n'était
pas d'une grande utilité. En effet, il était basé
sur le principe des bâtonnets de Neper et
nécessitait d'être encré à la main. 2022/2023
 Les machines différentielles et analytiques

La première idée d'une machine dite à différence semble être dûe à J.H.
Müller, un constructeur de calculatrices arithmétiques. En effet, en 1786,
dans un document décrivant sa machine arithmétique, il mentionne être en
mesure de réaliser une machine mécanique permettant d'appliquer la méthode
des différences finies et ainsi de réaliser mécaniquement des tables
arithmétiques.

2022/2023
 Les machines électromécaniques
 La mécanographie  Bell Labs Relays Computer

C'est donc au printemps 1938 que


Stibitz eut l'idée d'employer le
système décimal-codé-binaire
utilisé par les ingénieurs en
téléphone depuis environ 1930
C'est à Herman Hollerith (1860-1929) que
l'on doit les premiers progrès en ce sens. Il
créa son matériel dans le but d'aider au
traitement des données du recensement
américain de 1890. En effet, il y avait un
besoin pressant d'équipement sophistiqué
pour aider au dépouillement, car la
population croissait très rapidement et de
plus en plus de questions leur étaient
2022/2023
posées.
 Les machines électroniques
 Complex Number Calculator
 L'ABC (Atanasoff Berry Computer)

La construction débuta donc en avril 1939 et se


termina en octobre de la même année. Elle fut utilisé Le projet prit fin au printemps de 1942. Le
par le laboratoire à partir de janvier 1940 et demeura calculateur travaillait en binaire, un système
utilisée jusqu'en 1949. C'est avec cette machine que simple et fiable, utilisait la rapidité des lampes
fut réalisé pour la première fois un traitement à pour effectuer les opérations arithmétiques et
distance de données. En effet, une démonstration logiques et disposait d'une mémoire à
du Complex Number Calculator, a été réalisée en condensateurs qui présentait l'avantage d'être
1940 devant les membres de la Société américaine de peu dispendieuse
mathématiques 2022/2023
 Les générations d'ordinateurs
 Première génération (1948-1956)  Deuxième génération (1956-1963)

Caractérisée par l'utilisation des tubes à vide, cette C'est en 1947 que les physiciens
première génération débuta en 1948 avec la Bardeen, Brattain et Shockley,
finalisation du Manchester Mark 1. Jusqu'en 1951, inventèrent, aux laboratoires Bell,
les ordinateurs furent utilisés exclusivement par des le premier transistor à contact
militaires. En effet, c'est en 1951 que fut construit le ponctuel.
premier ordinateur commercial destiné à une
utilisation civile: l'UNIVAC 1.
2022/2023
 Quatrième génération (1971-Aujourd'hui)

 Troisième génération (1964-1971) C'est ensuite par le développement de


nouvelles techniques d'intégration que l'on
put augmenter encore le nombre de
composants contenus sur une même puce.
C'est la compagnie Intel qui créa le premier
microprocesseur, en utilisant la technologie
de LSI (large scale intégration) qui permet
de condenser des centaines de composants
électroniques sur une puce,
La troisième génération est donc réliée à l'utilisation
des circuits intégrés, développés, en 1958 par Jack Développé, en 1971, le microprocesseur Intel 4004 contenait
Kilby qui travaillait chez Texas Instruments. Ce l'ensemble de composantes de l'ordinateur.
premier prototype n'intégrait que trois composants Par la suite, on raffina encore les techniques d'intégration et dans
électroniques, mais ouvrait la voie à la les années '80, le VLSI (very large scale integration) permettait
miniaturisation. Il est à noter que le développement de réaliser des puces contenant des centaines de milliers de
des circuits intégrés à aussi mené à la création, en composants électroniques. Plus tard on réussit à excéder le
1967, (par le même Jack Kilby en collaboration avec millions de composants avec la technique d'ultra large scale
Jerry Merryman et James Van Tassel) de la première integration.
calculatrice de poche.
2022/2023
3-2 Ecriture scientifique

Dans un ordinateur, ou calculatrice, les nombres à virgule (réels) sont codés en virgule flottante. On parle de nombres
flottants (le type float de Python). La représentation binaire en machine d’un nombre flottant s’inspire de l’écriture
scientifique des nombres décimaux dont voici quelques rappels.

L’écriture scientifique permet d’uniformiser la façon d’écrire des nombres décimaux.


Exemple: 3542 s’écrit +3,542×103
−0,0724753 s’écrit −7,24753×10−2
Dans cette écriture, on distingue :
• Un signe (+ ou −) ;
• Un nombre décimal, appelé mantisse, compris dans l’intervalle [1;10[ (1 inclus et 10 exclu). Dans les deux
exemples, il s’agit de 3,542 et 7,24753 ;
• Un entier relatif 𝑛, appelé exposant. Dans les deux exemples, il s’agit de 3 et −2.
Ainsi, de manière générale, l’écriture scientifique d’un nombre décimal est : ±𝑚×10𝑛 2022/2023
3-3 La norme IEEE 754

La norme IEEE 754 est la plus utilisée pour représenter les nombres flottants. Ils sont représentés sur 32 bits (format
appelé « simple précision » ou binary32) ou sur 64 bits (format appelé « double précision », ou binary64) sous la
forme : 𝑠.𝑚×2𝑛
où :
• 𝑠 est le signe du nombre, codé sur 1 bit (0 pour + et 1
pour −) ; et en format 64 bits (double précision) par un
• 𝑛 son exposant en puissance de 2, codé sur 8 bits (en mot binaire de la forme
format 32 bits) ou sur 11 bits (en format 64 bits) ;
• 𝑚 sa mantisse codée sur 23 bits (en format 32 bits) ou
sur 52 bits (en format 64 bits).
Ainsi, en machine, un flottant est représenté en format 32
bits (simple précision) par un mot binaire de la forme 2022/2023
 Codage de la mantisse
Pour représenter les flottants, la base choisie est la base 2
Exemple:
(contrairement à l’écriture scientifique qui est la base 10) donc
Représentation machine du nombre 5,8125
On sait que 5,8125 est positif donc le bit de signe la mantisse est dans l’intervalle [1;2[. Il s’agit donc d’un
sera 0: nombre de la forme : 𝑚=1,𝑥𝑥…𝑥𝑥
Comme cette mantisse commence toujours par le chiffre 1, il a
Rappelons que 5,8125=(101,1101)2. Par analogie
avec l’écriture scientifique, on peut aussi écrire été choisi de ne pas coder ce « 1 » mais uniquement les chiffres
ce nombre binaire : 1,011101×22 en décalant la après la virgule.
virgule de deux rangs vers la gauche. En faisant Exemple (suite) Représentation machine du nombre
cela, on a fait apparaître : 5,8125
• la mantisse : 𝑚=1,011101 La mantisse de ce nombre est 𝑚=1,011101. Comme le « 1
• l’exposant : 2 » à gauche de la virgule n’est pas codé, la mantisse sera
Il reste maintenant à voir comment sont codés la codée par 01110100…0 en ajoutant autant de zéros que
mantisse et l’exposant. nécessaires pour arriver à 23 bits (simple précision) ou 52
bits (double précision) :

2022/2023
Exemple (suite) Représentation
machine du nombre 5,8125
 Codage de l’exposant
Rappelons que
L’exposant est codé sur 8 bits ou 11 bits selon le format utilisé.
Sur 8 bits on peut coder 256 valeurs : les entiers compris entre 5,8125=(101,1101)2=(1,011101×22)2 donc
−127 et 128. Sur 11 bits on peut coder 2048 valeurs : les l’exposant est 2. La norme IEEE 754 ne
entiers compris entre −1023 et 1024.
L’exposant est un entier relatif mais la norme IEEE 754 prévoit pas de coder +2 en complément à deux
n’utilise pas l’encodage par complément à 2 des entiers mais d’ajouter 127 en format simple précision
relatifs. Elle prévoit un décalage qui dépend de l’encodage
utilisé : (1023 en format double précision): on obtient
• Dans le format simple précision (32 bits), le décalage est alors 2+127=129. Il ne reste plus qu’à coder
127, c’est-à-dire qu’il faut ajouter 127 à l’exposant.
• Dans le format double précision (64 bits), le décalage est de l’entier 129 en binaire: (10000001)2. On ajoute
1023. L’objectif est d’obtenir un nombre positif pour coder éventuellement des zéros (à gauche !) pour
l’exposant. En effet, dans le format simple précision, en
procédant à ce décalage de 127, on obtient des valeurs compléter les 8 bits réservés à l’exposant.
positives : 2022/2023 Dans le format simple précision (sur 32 bits),
on obtient finalement:
Dans le format double précision (sur 64 bits), on ajouterait 1023 à la puissance pour
obtenir 1025 (2+1023) dont l’écriture binaire est (10000000001)2. On obtiendrait:
2022/2023

Bilan : En format simple précision, le nombre réel 5,8125 est représenté sur 32 bits en machine par le mot :
0 10000001 01110100000000000000000
En format double précision, il est représenté sur 64 bits en machine par le mot :
0 10000000001 0111010000000000000000000000000000000000000000000000
3-3 Une représentation approximative
 Codage approché de certains réels
Tous les nombres réels dont l’écriture en base est infinie ne peuvent être représentés de manière exacte en machine. Par exemple,
on a vu que le nombre décimal 1,2 a une écriture binaire infinie : 1,2=(1,001100110011…)2=+1,001100110011…×20
La mantisse de ce nombre est 𝑚=1,001100110011… donc elle est infinie. Or, il n’y a que 23 ou 52 bits réservés pour coder la
mantisse. L’ordinateur doit donc tronquer la mantisse à 23 ou 52 bits. Cela signifie qu’en format simple précision, la mantisse du
nombre 1,2 est codée par le mot binaire de 23 bits les autres bits ne pouvant pas être codés.
Seule une valeur tronquée de la mantisse peut être codée et donc la représentation en
machine du nombre réel 1,2 n’est qu’une approximation du réel 1,2.
Autrement dit, le nombre flottant 1.2 n’est qu’une valeur approchée du nombre réel 𝟏,𝟐.
Cet exemple n’en est qu’un parmi tant d’autres : il y a une infinité de nombres réels qu’il est impossible de
représenter de manière exacte en machine.
 Impossibilité de coder tous les nombres réels
Voici l’écriture binaire en format double précision de deux flottants.

On comprend aisément qu’il n’y a pas de flottant entre 1.5 et 1.5000000000000002. Le flottant
1.5000000000000001 est donc représenté comme 1.5.
La précision possible avec une mantisse sur 52 bits se situe au niveau dernier bit qui vaut 2−52 soit environ 2×10−16.
L’écart entre 1.5 et 1.5000000000000002 étant égal à 2×10−16, on ne peut pas trouver un flottant compris entre les
deux.
2022/2023
A retenir
Les nombres flottants sont une représentation approximative des nombres réels dans
un ordinateur. En particulier, il n’est pas possible de représenter de manière exacte en
machine tous les nombres réels. La manipulation de nombres réels par un langage
informatique est donc à prendre avec précaution car elle peut engendrer des résultats
surprenants, en particulier il ne faut jamais tester l’égalité entre deux flottants.

2022/2023
Je vous remercie de votre très
aimable attention

2022/2023

Vous aimerez peut-être aussi