Représentation des nombres réels
Représentation des nombres rationnels
En notation décimale, les chiffres à gauche de la virgule représentent des unités, des dizaines, des centaines, etc. et ceux à droite de la virgule, des dixièmes, des centièmes, des millièmes, etc. De même, en binaire, les chiffres à droite de la virgule représentent des demis, des quarts, des huitièmes, etc.
Représentation de la partie décimale d’un nombre
La méthode est simple et ressemble à celle utilisée pour représenter la partie entière d’un nombre :
A partir de la partie décimale du nombre à représenter :
- Multiplier le nombre par 2 ;
- Si le résultat est strictement inférieur à 1, alors on retient le chiffre 0, sinon on retient le chiffre 1 ;
- Recommencer à l’étape 1 avec la partie décimale du nombre obtenu à l’étape 2.
L’opération est terminée lorsque ce nombre est nul.
Valeur approchée
En base 10, il est impossible de représenter certains nombres rationnels (par exemple \(\frac{1}{3}\approx 0,33333333\cdots\)). Cela concerne tous les nombres pour lesquels il n’existe pas de puissance de 10 par lesquels on peut les multiplier pour obtenir un entier.
De la même manière, en base 2 il est impossible de représenter les nombres pour pour lesquels il n’existe pas de puissance de 2 par lesquels on peut les multiplier pour obtenir un entier.
Par exemple : \(0,1_{10}\approx 0,0001100110011\cdots\), avec le motif \(0011\) qui se répète à l’infini.
Virgule flottante
En base 10, il est possible d’écrire les très grands nombres et les très petits nombres en utilisant les puissances de 10 :
Par exemple \(5,187\cdot10^{23}\)
Il est possible de faire exactement la même chose avec une représentation binaire, en utilisant les puissances de 2 :
Par exemple \(101,1101\cdot2^{10}\). (ATTENTION, l’exposant 10 est aussi exprimé en binaire !)
Cette notation est appelée notation à virgule flottante car en effet, pour représenter un même nombre, la virgule peut être décalée à droite ou à gauche :
- en base 10, décaler la virgule vers la droite revient à multiplier le nombre par 10
exemple : \(12,5819\cdot10^{4}=125,819\cdot10^{3}\) - en base 2, décaler la virgule vers la droite revient à multiplier le nombre par 2
exemple : \(1110,1100101\cdot2^{1000}=11101,100101\cdot2^{0111}\)
D’une manière générale, une représentation à virgule flottante consiste à représenter un nombre réel par :
- un signe (égal à −1 ou 1),
- une mantisse (aussi appelée significande)
- et un exposant (entier relatif, généralement borné).
Un tel triplet représente le nombre réel : \(signe \times mantisse \times b^{exposant}\)
Représentation des flottants dans un ordinateur
Source : https://fr.wikipedia.org/wiki/IEEE_754
L’IEEE 754 est une norme sur l’arithmétique à virgule flottante. Elle est la norme la plus employée actuellement pour le calcul des nombres à virgule flottante dans le domaine informatique, avec les CPU et les FPU. La norme définit les formats de représentation des nombres à virgule flottante et valeurs spéciales (infinis et NaN), en même temps qu’un ensemble d’opérations sur les nombres flottants. La première version de cette norme date de 1985.
Selon la norme IEEE 754, le nombre réel à exprimer en binaire doit être écrit sous la forme :
\(\pm \times mantisse \times 2^{exposant}\)
de sorte que la mantisse s’écrive \(1,\cdots\)
et que sa partie décimale et l’exposant puissent être représentée en code binaire naturel :
\(s \times 1,a_{22}a_{21}\cdots a_{1}a_{0}\times 2^{b_{7}b_{6}\cdots b_{1}b_{0}}\)
Il peut être exprimé en binaire, à l’aide de 32 bits, sous la forme :
\(s\) | \(b_{7}b_{6}\cdots b_{1}b_{0}\) | \(a_{22}a_{21}\cdots a_{1}a_{0}\) |
bit de signe :
|
bits d’exposant :
\(exposant=\left(b_{7}b_{6}\cdots b_{1}b_{0}\right)_2-127\)
Soient des exposants \(2^{-126}\) à \(2^{127}\) Les valeurs 0000 0000 et 1111 1111 sont réservées à un autre usage |
bits de mantisse :
\(a_{22}a_{21}\cdots a_{1}a_{0}\)
Correspondants aux chiffres binaires après la virgule, la partie entière étant toujours égale à 1
|
Exemple :
La représentation sur 32 bits de \(0,1\) s’obtient de la manière suivante :
\(0,1=1,6\times 2^{-4}\)
\(-4+127=123=0111 1011_2\)
\(1,6=1,10011001100110011001100_2\)
⇒ 0 01111011 10011001100110011001100
La norme prévoit deux formats :
- Simple précision : 32 bits (8 bits d’exposant, 23 bits de mantisse)
- Double précision : 64 bits (11 bits d’exposant, 52 bits de mantisse)