Académique Documents
Professionnel Documents
Culture Documents
4.1 Principe
Avant-propos
Il arrive dans de nombreux domaines que l'intervalle des valeurs numériques pertinentes
soit particulièrement étendu. L'astronomie en est un exemple extrème puisque certains
calculs peuvent faire intervenir simultanément la masse du soleil (i.e. 2.1030kg) et la masse
de l'électron (i.e. 9.10-31kg). Ces deux nombres diffèrent de plus de 60 ordres de grandeur
(1060) !
Des calculs faisant intervenir ces nombres pourraient s'effectuer en précision multiple,
avec par exemple des nombres de 62 digits. Tous les opérandes et tous les résultats
seraient représentés par des nombres de 62 digits. Cependant, la masse du soleil n'est
connue qu'avec une précision de 5 digits, et il n'y a en physique pratiquement aucune
mesure que l'on puisse réaliser avec une précision de 62 digits. Une solution serait alors
d'effectuer les calculs avec une précision de 62 digits et de laisser tomber 50 ou 60 d'entre
eux avant d'annoncer les résultats, mais ceci est coûteux à la fois en espace mémoire et en
temps de calcul.
En fait, ce qu'il faut est un système permettant de représenter des nombres, tel que la taille
de l'intervalle des nombres "exprimables" soit indépendante du nombre de digits
significatifs.
Principes
Le codage utilisé est basé sur la notation scientifique des nombres :
x = m . 10 e
où x est le nombre considéré, m est appelé la mantisse, et e est l'exposant. Pour représenter
de tels nombres il suffit de stocker l'exposant et la mantisse. Ces nombres sont appelés
nombre à virgule flottante, car il possède de nombreuses représentations différentes qui
dépendent uniquement de la position de la virgule :
0.3141592 . 101 = 3.141592 . 100
= 31.41592 . 10-1
= 314.1592 . 10-2
etc...
Cette propriété est plus ennuyeuse que pratique lorsqu'il s'agit d'effectuer des calculs. Pour
éviter ce problème, un nombre à virgule flottante est toujours stocké sous une forme
unique, celle qui revient à n'avoir qu'un seul digit non nul à la gauche de la virgule. Cette
représentation est appelée la forme normalisée. La forme normalisée du nombre ci-dessus
est 3.141592 . 100, car c'est la seule représentation à n'avoir qu'un unique digit non nul à
la gauche de la virgule.
L'intervalle utile (nombres "exprimables") est lié au nombre de digits de l'exposant, tandis
que la précision sous laquelle on connait les nombres est liée au nombre de digits de la
mantisse. En supposant que l'on dispose d'une mantisse sur 3 digits plus le signe, et que
l'exposant soit connu avec 2 digits plus le signe, la droite des réels sera couverte de la
façon suivante :
nombres 0 nombres
négatifs negatifs négatifs | positifs positifs positifs
trop grands exprimables trop petits | trop petits exprimables trop
grands
----------+-------------+-----------+-----------+-------------
+----------->
-9.999 1099 -1.0 10-99 0 1.0 10-99 9.999 1099
Il est important de noter qu'il est impossible de représenter des nombres positifs ou
négatifs "trop grands" ou "trop petits", et que même dans l'intervalle des nombres
"exprimables" il n'est pas possible de représenter tous les réels. L'ensemble des nombres à
virgule flottante ne couvre pas, loin de là, la droite des réels, même dans l'intervalle utile.
Le nombre de nombres à virgule flottante "exprimables" à l'aide d'une représentation
donnée est éventuellement très grand, mais il est fini. Dans l'exemple ci-dessus (i.e. 3
digits pour la mantisse et 2 digits pour l'exposant), il y a seulement
9x10x10x199 = 179.100 nombres positifs et autant de négatifs, plus zéro (soit un total de
358.201 nombres) qui puissent être représentés.
Lorsque le résultat d'un calcul ne peut être directement représenté par le système de
codage utilisé, la solution évidente consiste à utiliser le nombre "exprimable" le plus
proche. Cette approximation est appelée erreur d'arrondi.
Exemples
Généralement les ordinateurs utilisent des représentations en base 2, 4, 8 ou 16 plutôt que
10.
Soit une représentation avec un exposant sur 7 bits en code relatif à 64 (plus un bit de
signe) et une mantisse sur 16 bits en base 2. Quelle est la valeur du nombre dont la
représentation est la suivante ?
0 1010100 . 0000000000011011
/ ------- ----------------
signe exposant mantisse
Le bit de signe est 0 ce qui correspond à un nombre positif. Le code de l'exposant est
84, et sa valeur 84 - 64 = 20. On rappelle qu'en code relatif à 64 :
Code(x) = 64 + x --> x = Code(x) - 64
La mantisse s'interprète de la façon suivante :
0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1
x x x x x x x x x x x x x x x x
2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 2-10 2-11 2-12 2-13 2-14 2-15 2-16