Vous êtes sur la page 1sur 1

Non connecté Discussion Contributions

Rechercher dans Wikipédia


Créer un compte Se connecter

Accueil Article Discussion Lire Modifier Modifier le code Voir l’historique


Portails thématiques
Article au hasard
Contact
Virgule flottante
Contribuer
La virgule flottante est une méthode d'écriture de nombres réels
fréquemment utilisée dans les ordinateurs. Elle consiste à représenter un
Débuter sur
Wikipédia nombre réel par :
Aide
un signe (égal à −1 ou 1),
Communauté Un diagramme
une mantisse (aussi appelée significande), représentant un nombre à
Modifications virgule flottante avec une
récentes et un exposant (entier relatif, généralement borné).
mantisse et un exposant.
Faire un don
Un tel triplet représente le nombre réel
Outils signe × mantisse × bexposant
Pages liées
où b est la base de représentation (généralement 2 sur ordinateur, mais aussi 8 ou 16 sur certaines
Suivi des pages liées
anciennes machines, 10 sur de nombreuses calculatrices, ou éventuellement toute autre valeur). En faisant
Téléverser un fichier
varier l'exposant, on fait « flotter » la virgule. La mantisse est représentée par une suite de chiffres en base
Pages spéciales
b, généralement de taille fixée, dans laquelle on choisit de placer une virgule à une position fixe : juste
Lien permanent
Informations sur la avant ou juste après le premier chiffre, ou juste après le dernier chiffre ; dans ce dernier cas, la mantisse
1
page est un entier naturel . Pour un nombre donné, la valeur de l'exposant dépend de ce choix.
Citer cette page
Les nombres en virgule flottante, généralement appelés plus simplement nombres flottants, voire
Élément Wikidata
flottants, peuvent ainsi être vus comme l'équivalent informatique de la notation scientifique, qui correspond
Imprimer / exporter à la deuxième convention (virgule placée juste après le premier chiffre).
Créer un livre
Sommaire [masquer]
Télécharger comme
PDF 1 Comparaison avec la virgule fixe
Version imprimable 1.1 Avantage

Dans d’autres 1.2 Inconvénient


langues 2 Éléments de mathématique des nombres flottants
‫العربية‬ 3 Mises en œuvre
Català 3.1 Norme IEEE 754
Deutsch 3.2 Flottants étendus
English
3.3 Exceptions
Español
3.4 Précision arbitraire
Italiano
Nederlands 4 Précautions d'emploi
Português 5 Développement historique
6 Voir aussi
31 de plus 6.1 Notes
6.2 Articles connexes
Modifier les liens
6.3 Liens externes

Comparaison avec la virgule fixe [ modifier | modifier le code ]

La virgule flottante s'oppose à la représentation en virgule fixe, où l'exposant e est fixé.

Avantage [ modifier | modifier le code ]

L'avantage de la représentation en virgule flottante par rapport à la virgule fixe est que la virgule flottante
est capable, à nombre de bits égal, de gérer un intervalle de nombres réels plus important.

Par exemple, une représentation décimale en virgule fixe ayant 7 chiffres décimaux dont 2 chiffres après la
virgule peut représenter les nombres 12345.67, 123.45, 1.23, etc. La représentation décimale en virgule
flottante (comme le format IEEE 754 decimal32) peut quant à elle, avec sept chiffres décimaux, représenter
en plus 1.234567, 123456.7 = 1.234567 × 105, 0.00001234567 = 1.234567 × 10−5, 1234567000000000 =
1.234567 × 1015, etc.

Inconvénient [ modifier | modifier le code ]

En revanche, le format à virgule flottante occupe un peu plus de place, car il est nécessaire d'encoder la
position de la virgule (représentée par l'exposant). Pour le même espace disponible, la virgule flottante offre
donc une étendue de nombres plus grande au détriment de la précision.

Éléments de mathématique des nombres flottants [ modifier | modifier le code ]

En pratique, l'ensemble des nombres réels qui peuvent effectivement être représentés sous la forme d'un
nombre flottant, ou ensemble des flottants, est un ensemble fini. Cet ensemble n'est totalement défini que
lorsque la base de représentation et le nombre de chiffres pour la mantisse, appelé précision, sont choisis
et explicités, ce que réalise la norme IEEE 754 présentée plus loin. Ce double choix définit à la fois
l'ensemble des flottants de travail particulier et la règle de représentation effective.

L'ensemble des flottants n'est pas stable sous l'action des opérations arithmétiques usuelles. La stabilité est
retrouvée quand s'y ajoute une opération de reprojection dans l'ensemble des flottants, par arrondi selon la
fonction d'arrondie choisie, ou mode d'arrondi. Ceci permet de définir une arithmétique en virgule flottante,
pour laquelle l'ensemble des flottantes redevient stable.

Un concept important est la notion d'epsilon, défini de manière usuelle par la différence entre 1 et son
successeur dans l'ensemble des flottants. Il est directement lié à la précision du système à virgule flottante
considéré.

Mises en œuvre [ modifier | modifier le code ]

La vitesse des opérations en virgule flottante, communément appelée


FLOPS dans les mesures de performances, est une caractéristique
importante des machines, en particulier dans les logiciels qui effectuent
des calculs mathématiques à grande échelle.

Au fil du temps, un certain nombre de représentations à virgule flottante a


vu le jour, ce qui constituait un frein au portage des programmes de calcul
scientifique d'une machine à l'autre, en raison des différences de Le premier ordinateur
représentations internes et de comportement des nombres flottants. Pour programmable utilisant des
nombres à virgule flottante
cette raison, une norme a finalement été mise en place par l'IEEE en Z3 (réplique au Deutsches
1985 : IEEE 754. Museum à Munich).

Norme IEEE 754 [ modifier | modifier le code ]


Article détaillé : IEEE 754.
2 3
La norme IEEE 754 de 1985 (reprise par la norme internationale CEI 60559 ) spécifie deux formats de
nombres en virgule flottante (et deux formats étendus optionnels) en base 2, ainsi que quelques opérations
associées : principalement l'addition, la soustraction, la multiplication, la division et la racine carrée. La
quasi-totalité des architectures d'ordinateurs actuelles, y compris IA32, PowerPC, et AMD64, incluent une
implémentation matérielle des calculs sur flottants IEEE, directement dans le microprocesseur, garantissant
une exécution rapide.

Les deux formats fixés par la norme IEEE 754 sont sur 32 bits (« simple précision », renommé binary32
4
dans la révision de 2008 ) et 64 bits (« double précision », renommé binary64 dans la révision de 2008). La
répartition des bits est la suivante, où 1 ≤ M < 2 :

Chiffres
Précision Encodage Signe Exposant Mantisse Valeur d'un nombre Précision
significatifs

Simple
32 bits 1 bit 8 bits 23 bits 24 bits environ 7
précision

Double
64 bits 1 bit 11 bits 52 bits 53 bits environ 16
précision

Le tableau ci-dessus indique les bits représentés. Le premier bit de la mantisse d'un nombre normalisé
étant toujours 1, il n'est représenté dans aucun de ces deux formats : on parle de bit implicite. Pour ces
deux formats, les précisions sont donc respectivement de 24 et de 53 bits.

Deux valeurs du champ Exposant sont réservées pour encoder les nombres spéciaux : nombres
dénormalisés et zéro signé d'une part, les infinis et les NaN (Not-a-Number) d'autre part. Les autres
définissent la dynamique de la représentation : 8 bits permettent de faire varier l'ordre de grandeur sur 256
binades (en) ou 76 décades.

En plus de la représentation, la norme spécifie exactement le comportement des opérations supportées :


celles-ci doivent être correctement arrondies dans un des 4 modes d'arrondi choisi.

Cette norme a été révisée dans les années 2000 [réf. nécessaire] pour aboutir à la publication d'une nouvelle
4
norme en 2008 . De nouveaux formats ont été définis (« quadruple précision » ou binary128, et des
formats décimaux), la notion de format étendu a été généralisée, et de nouvelles opérations ont été
ajoutées, comme le FMA; les principales fonctions élémentaires sont recommandées.

Plusieurs compilateurs de Fortran et d'autres langages peuvent être appelés avec une option de double
5
précision automatique [source insuffisante] qui force tous les flottants d'un programme à la double précision
et dispense d'une revue fastidieuse pouvant entraîner des erreurs.

Flottants étendus [ modifier | modifier le code ]

Certaines implémentations ajoutent un ou plusieurs formats de précision supérieure ; ainsi, IA-32 et IA-64
ont un format étendu sur 80 bits. La norme IEEE 754-1985 prévoit des tailles minimales pour ces formats
étendus :

Précision Signe Exposant Mantisse

Simple précision étendue 1 bit 11 bits ou plus 32 bits ou plus

Double précision étendue 1 bit 15 bits ou plus 64 bits ou plus

Ces représentations « étendues » n'utilisent pas forcément le bit implicite de la mantisse.

Dans la pratique, seule la double précision étendue est encore utilisée, dans sa forme minimale (1+15+64 =
80 bits, le format étendu de l'IA32 mentionné plus haut), si on exclut les formats de précision supérieure
(comme la double précision en tant que simple précision étendue, et la quadruple précision en tant que
double précision étendue).

Exceptions [ modifier | modifier le code ]

En arithmétique en virgule flottante IEEE, un calcul peut aboutir à des valeurs qui ne correspondent pas à
des nombres réels :

NaN (« not a number »), qui sera par exemple le résultat de la tentative de division flottante de zéro par
zéro, ou de la racine carrée d'un nombre strictement négatif. Les NaN se propagent : la plupart des
opérations faisant intervenir un NaN donnent NaN (des exceptions sont possibles, comme NaN
puissance 0, qui peut donner 1).
Un infini positif et un infini négatif, qui sont par exemple le résultat d'un débordement en arrondi au plus
près.

Précision arbitraire [ modifier | modifier le code ]

Lorsque la précision désirée pour le résultat dépasse celle de l'arithmétique en virgule flottante fournie par
la machine, on peut devoir recourir à des calculs sur des flottants en précision supérieure. Cela s'avère
aussi nécessaire pour effectuer des calculs numériquement instables.

Différentes bibliothèques logicielles, ainsi que la plupart des systèmes de calcul formel, offrent une
arithmétique en virgule flottante en précision arbitraire, dans laquelle la taille de la mantisse peut être
choisie par l'utilisateur. Citons notamment la bibliothèque GNU MPFR, qui implémente les opérations
arithmétiques de base ainsi que de nombreuses fonctions usuelles sur les flottants en base 2 de précision
arbitraire. La sémantique des opérations MPFR est inspirée de celle de la norme IEEE-754. En particulier,
la bibliothèque garantit l'arrondi correct des résultats.

Précautions d'emploi [ modifier | modifier le code ]

Les calculs en virgule flottante sont pratiques, mais présentent divers désagréments, notamment :

leur précision limitée, qui se traduit par des arrondis (dus aux opérations, ainsi qu'aux changements de
base implicites) qui peuvent s'accumuler de façon gênante. En particulier, la soustraction de deux
nombres très proches et entachés d'erreur provoque une grande perte de précision relative : on parle
de cancellation (plus précisément, cancellation catastrophique) ;
une plage d'exposants limitée, autorisant une certaine dynamique, mais pouvant donner lieu au-delà à
des débordements (overflows) lorsque le résultat d'une opération est plus grand, en valeur absolue,
que la plus grande valeur représentable, et à des sous-passements (underflows), lorsqu'un résultat est
plus petit, en valeur absolue, que le plus petit flottant normalisé positif, puis à des résultats n'ayant plus
aucun sens.

Il est par exemple tentant de réorganiser des expressions en virgule flottante comme on le ferait
d'expressions mathématiques. Cela n'est cependant pas anodin :

les calculs en virgule flottante, contrairement aux calculs sur les réels, ne sont pas associatifs. Par
exemple, avec une précision relative de 3 chiffres décimaux, on aurait (0,999+0,0004)+0,0004 = 0,999 +
0,0004 = 0,999 mais 0,999+(0,0004+0,0004)=0,999+0,0008 = 1,000 ; on dit qu'il y a absorption
lorsqu'un opérande comme 0,999 absorbe ainsi un plus petit non nul ;
l'évaluation des expressions est parfois faite en précision étendue, avec retour à la précision normale
lors du rangement des valeurs ; dans ce cas, on peut avoir une meilleure précision en éliminant
certaines variables intermédiaires peu utiles, et les rangements associés.

Développement historique [ modifier | modifier le code ]

Dès 1914, L. Torres y Quevedo cherchait à mettre au point une version électromécanique de la machine
6, 7
analytique de Charles Babbage et imagina d'exécuter les calculs en virgule flottante .

Vingt-cinq ans plus tard (en 1938), Konrad Zuse parachevait son premier calculateur mécanique
8
programmable binaire, le Z1 ; cet appareil utilisait lui aussi une représentation en virgule flottante sur 24
bits, avec un exposant signé codé sur 7 bits, une mantisse codée sur 16 bits (dont un bit implicite), et un bit
de signe. Le calculateur Z3 à relais (1941), plus fiable, introduisait la notion de quantité infinie (positive ou
négative) ∞ ; cela permettait de donner des résultats infinis, comme ceux résultant d'opérations telles que
, et il interrompait les calculs lorsqu'ils portaient sur des indéterminations, comme . Zuse
se proposait de gérer tous les calculs arithmétiques faisant intervenir et les indéterminations (NaN),
anticipant ainsi avec quarante ans d'avance des conventions qui seront intégrées à la norme américaine
9
IEEE . Simultanément, le mathématicien von Neumann s'opposait au contraire à l'introduction du calcul en
9
virgule flottante pour la Machine IAS (1951).

Le premier calculateur commercial disposant d'un organe de calcul en virgule flottante pré-câblé aura été le
Z4 de Zuse, développé entre 1942 et 1945. En 1946, Bell Laboratories mit sur le marché le Mark V, qui met
10
en œuvre une arithmétique en virgule flottante décimale .

Le Pilot ACE, un prototype britannique développé en 1950 au National Physical Laboratory, disposait
d'emblée d'une arithmétique en virgule flottante. 33 de ces ordinateurs furent commercialisés par English
Electric sous le nom de DEUCE. Quoique l’arithmétique fût simplement programmée et non pré-câblée,
l'existence d'une horloge cadencée à 1 MHz rendit les premières années cette machine plus rapide que ses
concurrentes.

L’IBM 704, produit en série, suivit en 1954 ; il amena la notion d'exposant à décalage. Au cours des
décennies suivantes, le recours à une unité arithmétique et logique (UAL) à arithmétique en virgule flottante
micro-câblée (FPU) ne fut plus qu'une spécification optionnelle : les ordinateurs qui disposaient d'un tel
composant étaient dits scientifiques. Le passage des IBM 704 et 7044 aux IBM 360 introduisit de nombreux
problèmes numériques, car la virgule flottante simple précision, ramenée de 36 bits binaire à 32 bits
hexadécimale, devenait souvent critique.

La série 1100/2200 des ordinateurs UNIVAC, apparue sur le marché en 1962, comportait deux
représentations en virgule flottante :

Simple précision: 36 bits, comprenant un bit de signe, 8 bits d'exposant et une mantisse codée sur 27
bits.
Double précision: 72 bits, comprenant un bit de signe, 11 bits d'exposant et une mantisse codée sur 60
bits.

Le Burroughs 6500 (en) utilisait quant à lui une virgule flottante en base 8, en 48 et 96 bits.

Le Control Data 6600 utilisait une virgule flottante binaire 60 bits à mantisse entière.

Sur mini-ordinateur, la virgule flottante resta longtemps programmée. Une unité virgule flottante apparaît
chez DEC sur le PDP11-34a en 1977, et en 1979 sur les 21MXF (en) de Hewlett-Packard.

Ce n'est qu’avec le lancement par Intel du microprocesseur i486, en 1989, que les ordinateurs individuels
furent enfin dotés en standard d'une UAL à virgule flottante micro-câblée (les coprocesseurs
mathématiques x87 étaient préalablement optionnels).

Voir aussi [ modifier | modifier le code ]

Notes [ modifier | modifier le code ]


1. Idée retenue dans des formats Burroughs (48/96 bits) ou Control Data (60 bits).
2. Norme IEEE 754-1985 [archive]
3. préface du standard ISO/IEC/IEEE 60559 [archive]
4. a et b Norme IEEE 754-2008 [archive]
5. Exemple de la GNU Compiler Collection [archive]
6. Pour traiter grands et petits nombres, vers 1840 C. Babbage tentait de manipuler des nombres virgule fixe de 50
chiffres décimaux : B. Randell (Ed.), The Origins of Digital Computers: Selected Papers, 464p., Springer-Verlag,
Heidelberg, 1973.
7. B. Randell, « From analytical engine to electronic digital computer: the contributions of Ludgate, Torres, and
Bush », IEEE Annals of the History of Computing, 4e série, no 4), 1982, p. 327–341
8. « Konrad Zuse’s Legacy: The Architecture of the Z1 and Z3 », IEEE Annals of the History of Computing, vol. 19,
no 2, 1997, p. 5–15 (DOI 10.1109/85.586067, lire en ligne [archive])
9. a et b William Kahan, « John von Neumann Lecture on 'The Baleful Effect of Computer Languages and

Benchmarks upon Applied Mathematics, Physics and Chemistry' (1951) » [archive], sur Soc. Ind. & Appl. Math.,
15 juillet 1997
10. (en) Brian Randell (dir.), The Origins of Digital Computers : Selected Papers, Berlin; New York, Springer-Verlag,
1973 (réimpr. 3e, 1982), 580 p. (ISBN 3-540-11319-3, lire en ligne [archive]), p. 244

Articles connexes [ modifier | modifier le code ]


IEEE 754
Virgule fixe
Nombre décimal
Unité de calcul en virgule flottante

Liens externes [ modifier | modifier le code ]


(fr) Cours sur l'arithmétique flottante [archive]
(en) David Monniaux The pitfalls of verifying floating-point computations [archive], dans ACM Transactions
on Programming Languages and Systems, mai 2008 : avertissement sur divers comportements non
intuitifs des flottants
(en) Considérations mathématiques sur la virgule flottante [archive]
(en) Convertisseur binaire [archive] : Convertisseur binaire interactif à précisions simple et double selon
la norme IEEE 754

v·m [masquer]
Types de données
Non interprétée Bit · Byte · Trit · Tryte · Mot
Bignum · Complexe (en) · Décimal (en) · Virgule fixe · Virgule flottante · Entier
Numérique
(Non signé (en)) · Intervalle · Rationnel (en)
Texte brut Caractère · Chaîne de caractères
Pointeur Adressage mémoire (Physique · Virtuelle) · Référence
Type algébrique de données (Généralisé) · Tableau · Tableau associatif · Classe ·
Composite (en) Dépendant · Égalité (en) · Inductive (en) · Liste · Objet (Métaobjet) · Option (en) ·
Produit (Enregistrement) · Ensemble (set) · Vecteur · Union (en) (Disjointe)
Booléen · Type vide · Collection · Type énuméré · Exception · Fonction ·
Autres Opaque (en) · Type récursif · Sémaphore · Flux · Top (en) · Type class (en) · Type
unité · Void
Type abstrait · Structure de données · Généricité · Kind (en) (Métaclasse) ·
Articles liés Parametric polymorphism (en) · Primitive data type (en) · Interface · Subtyping (en)
· Type constructor (en) · Conversion de type · Type system (en)

Portail de l’informatique

Catégorie : Calcul informatique [+]

La dernière modification de cette page a été faite le 23 mars 2021 à 00:43.

Droit d'auteur : les textes sont disponibles sous licence Creative Commons attribution, partage dans les mêmes
conditions ; d’autres conditions peuvent s’appliquer. Voyez les conditions d’utilisation pour plus de détails, ainsi que les
crédits graphiques. En cas de réutilisation des textes de cette page, voyez comment citer les auteurs et mentionner la
licence.
Wikipedia® est une marque déposée de la Wikimedia Foundation, Inc., organisation de bienfaisance régie par le
paragraphe 501(c)(3) du code fiscal des États-Unis.

Politique de confidentialité À propos de Wikipédia Avertissements Contact Version mobile Développeurs

Statistiques Déclaration sur les témoins (cookies)

Vous aimerez peut-être aussi