next up previous index
suivant: Les flottants au format monter: Les réels précédent: Les réels   Index

Virgule fixe et flottante.

La première idée qui vient naturellement serait d'utiliser un entier et de déplacer la virgule d'un nombre fixe de position, ce qui revient à mulitplier par une puissance (négative) de la base. Par exemple en base 10 avec un décalage de 4, 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 $ \in$ [0, bn[. Soit un réel x représenté par

x = mbe,    m $\displaystyle \in$ [0, bn[

Si m $ \in$ [0, bn-1[, alors on peut aussi écrire x = m'be-1 avec m' = mb $ \in$ [0, bn[, quelle écriture faut-il choisir? Intuitivement, on sent qu'il vaut mieux prendre m' le plus grand possible, car cela augmente le nombre de chiffres significatifs (alors que des 0 au début de m ne sont pas significatifs). Ceci est confirmé par le calcul de l'erreur d'arrondi pour représenter un réel. En effet, si x est un réel non nul, il ne s'écrit pas forcément sous la forme mbe, on doit l'arrondir, par exemple au plus proche réel de la forme mbe. La distance de x à ce réel est inférieure ou égale à la moitié de la distance entre deux flottants consécutifs, mbe et (m + 1)be, donc l'erreur d'arrondi est inférieure ou égale à be/2. Si on divise par x $ \geq$ mbe, on obtient une erreur relative d'arrondi majorée par 1/(2m). On a donc intérêt à prendre m le plus grand possible pour minimiser cette erreur. Quitte à mulitplier par b, on peut toujours se ramener (sauf exceptions, cf. ci-dessous), à m $ \in$ [bn-1, bn[, on a alors une erreur d'arrondi relative majorée par

$\displaystyle {\frac{{1}}{{2b^{n-1}}}}$

On appelle flottant normalisé un flottant tel que m $ \in$ [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 :

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).


next up previous index
suivant: Les flottants au format monter: Les réels précédent: Les réels   Index
Retour à la page principale de mat249