1234.5678
serait représenté par 12345678
et 1.2345678
par
12345
(on passe de l'entier au réel par multiplication
par 10-4. L'inconvénient d'une telle représentation est
qu'on ne peut pas représenter des réels grands ou petits,
comme par exemple le nombre d'Avogadro, la constante de Planck, etc.
D'où l'idée de ne pas fixer la position de la virgule, on parle
alors de représentation à virgule flottante ou de nombre flottant : on
représente un nombre par deux entier, l'un appelé mantisse
reprend les chiffres significatifs du réel sans virgule, l'autre
l'exposant, donne la position de la virgule. On sépare
traditionnellement la mantisse de l'exposant par la lettre e
.
Par exemple 1234.5678
peut être représenté
par 12345678e-8
(mantisse 12345678
, exposant -8)
mais aussi par 1234567800e-10
.
Naturellement, sur un ordinateur, il y a des limites pour les entiers représentant la mantisse m et l'exposant e. Si on écrit les nombres en base b, la mantisse m s'écrira avec un nombre n fixé de chiffres (ou de bits en base 2), donc m [0, bn[. Soit un réel x représenté par
On appelle flottant normalisé un flottant tel que m [bn-1, bn[. Pour écrire un réel sous forme de flottant normalisé, on écrit le réel en base b, et on déplace la virgule pour avoir exactement n chiffres non nuls avant la virgule et on arrondit (par exemple au plus proche). L'exposant est égal au décalage effectué.
Ainsi, l'erreur d'arrondi commise lorsqu'on représente un réel (connu exactement) par un double normalisé est une erreur relative inférieure à de 2-53 (b = 2 et n = 52 + 1 pour les doubles).
Exemples :
314159.265...
on arrondit à 314159 donc
on obtient 314159e-5
.
11
par
101
, ce qui donne
11 | 101 110 --------- -101 | 0.1001 ---- | 010 | 100 | 1000 | - 101 | ----- | 011 |on retrouve le nombre de départ donc le développement est périodique et vaut
0.1001 1001 1001 ...
.
On décale le point de 10 positions, on arrondit,
donc trois cinquièmes est
représenté par la mantisse 1001100110
et l'exposant
-10
. On observe aussi sur cet exemple que 3/5 dont l'écriture
en base 10 0.6
est exacte, n'a pas d'écriture exacte en base
2 (de même que 1/3 n'a pas d'écriture exacte en base 10).
Il existe une exception à la possibilité de normaliser les flottants, lorsqu'on atteint la limite inférieure de l'exposant e. On appelle flottant dénormalisé un flottant dont l'exposant est l'exposant minimal représentable sur machine et dont la mantisse appartient à [0, bn-1[. Par exemple 0 est représenté par un flottant dénormalisé de mantisse 0 (en fait 0 a deux reprsentation, une de signe positif et une de signe négatif).
Enfin, on utilise traditionnellement une valeur de l'exposant pour représenter les nombres plus grands que le plus grand réel reprsentable sur machine (traditionnellement appelé plus ou moins infini) et les erreurs (par exemple 0./0. ou racine carrée d'un nombre réel négatif, traditionnellement appelé NaN, Not a Number).
Exercice : quels sont les nombres réels représentables exactement en base 10 mais pas en base 2 ?
Les ordinateurs reprsentent générallement les flottants en base 2
(cf. la section suivante pour
plus de précisions), mais cette représentation n'est pas utilisée
habituellement par les humains, qui préfèrent compter
en base 10. Les ordinateurs effectuent donc la conversion dans
les routines d'entrée-sortie. Le format standard utilisé
pour saisir ou afficher un nombre flottant dans un logiciel
scientifique est composé d'un nombre à virgule
flottante utilisant le point comme séparateur décimal (et
non la virgule) suivi si nécessaire de la lettre e
puis de l'exposant,
par exemple 1.23e-5
ou 0.0000123
. Dans les
logiciels de calcul formel, pour distinguer un entiers
représentés par un entier
d'un entier représenté par un flottant on écrit
l'entier suivi de .0
par exemple 23.0
.
Remarque :
Les microprocesseurs ayant un mode BCD peuvent avoir un format
de représentation des flottants en base 10, les nombres décimaux
comme par exemple 0.3 peuvent être représentés exactement.
Certains logiciels, notamment maple, utilisent par défaut des
flottants logiciels en base 10 sur des microprocesseurs sans mode BCD,
ce qui entraine une baisse de
rapidité importante pour les calculs numériques (on peut
partiellement améliorer les performances en utilisant evalhf
en maple).