IEEE-754

IEEE-754

IEEE 754

L’IEEE 754 est un standard pour la représentation des nombres à virgule flottante en binaire. Il est le plus employé actuellement pour le calcul des nombres à virgule flottante dans le domaine informatique, avec les CPU et les FPU. Le standard définit les formats de représentation des nombres à virgule flottante (signe, mantisse, exposant, nombres dénormalisés) et valeurs spéciales (infinis et NaN), en même temps qu’un ensemble d’opérations sur les nombres flottants. Il décrit aussi quatre modes d'arrondi et cinq exceptions (comprenant les conditions dans lesquelles une exception se produit, et ce qu'il se passe dans ce cas).

Les quatre modes d'arrondi :

  • Vers moins l'infini
  • Vers plus l'infini
  • Vers zéro
  • Au plus proche

La norme IEEE 754 définit 4 formats pour représenter des nombres à virgule flottante :

  • simple précision (32 bits : 1 bit de signe, 8 bits d'exposant (-126 à 127), 23 bits de mantisse),
  • simple précision étendue (≥ 43 bits, peu utilisé),
  • double précision (64 bits : 1 bit de signe, 11 bits d'exposant (-1022 à 1023), 52 bits de mantisse),
  • double précision étendue (≥ 79 bits, souvent implémenté avec 80 bits : 1 bit de signe, 15 bits d'exposant (-16382 à 16383), 64 bits de mantisse).

Par exemple, dans le langage C, le compilateur gcc pour les architectures compatible Intel 32 bits utilise le format simple précision pour les variables de type float, double précision pour les variables de type double, et double précision étendue pour les variables de type long double.

Le titre complet du standard est IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985) (standard IEEE pour l'arithmétique binaire en virgule flottante), et est aussi connu sous le nom IEC 60559:1989, Binary floating-point arithmetic for microprocessor systems. [1]

Sommaire

Format d'un nombre en virgule flottante

Conventions utilisées dans l'article

Dans un mot de longueur W, les bits sont indexés de 0 à W-1, inclus. Le bit 0 est placé à droite, et il représente le bit de poids faible (c’est-à-dire celui qui va provoquer la plus petite variation s’il est modifié).

Format général

Un nombre flottant est formé de trois éléments : la mantisse, l'exposant et le signe. Le bit de poids fort est le bit de signe. Cela signifie que si ce bit est à 1, le nombre est négatif, et s’il est à 0, le nombre est positif. Les e bits suivants représentent l'exposant décalé, et les m bits suivants (m bits de poids faible) représentent la mantisse.

Format général flottants IEEE 754
Signe Exposant Mantisse
(1 bit) (e bits) (m bits)

Décalage de l'exposant

L'exposant est décalé de 2e-1 - 1 (e représente le nombre de bits de l'exposant). Ce décalage est utile car l'exposant peut être positif ou négatif. Cependant, la représentation habituelle des nombres signés (complément à 2) rendrait la comparaison entre les nombres flottants difficile. Pour régler ce problème, l'exposant est décalé, afin de le stocker sous forme d'un nombre non signé.

L'interprétation d'un nombre (autre qu'infini) est donc : valeur = signe × 1,mantisse × 2exposant − (2e−1−1), avec signe = ±1.

Exceptions

Le bit de poids fort de la mantisse est déterminé par la valeur de l'exposant. Si l'exposant est différent de 0 et de 2e − 1, le bit de poids fort de la mantisse est 1, et le nombre est dit "normalisé". Si l'exposant est nul, le bit de poids fort de la mantisse est nul, et le nombre est 'dé-normalisé'. Il y a trois cas particuliers :

  • si l'exposant et la mantisse sont tous deux nuls, le nombre est ±0 (selon le bit de signe)
  • si l'exposant est égal à 2e − 1, et si la mantisse est nulle, le nombre est ±infini (selon le bit de signe)
  • si l'exposant est égal à 2e − 1, mais que la mantisse n'est pas nulle, le nombre est NaN (not a number : pas un nombre).

Nous pouvons le résumer ainsi :

Type Exposant Mantisse
Zéros 0 0
Nombres dénormalisés 0 différente de 0
Nombres normalisés 1 à 2e − 2 quelconque
Infinis 2e − 1 0
NaNs 2e − 1 différente de 0

Format simple précision (32 bits)

Représentation simple précision flottants IEEE 754

Un nombre flottant simple précision est stocké dans un mot de 32 bit : 1 bit de signe, 8 bits pour l'exposant et 23 pour la mantisse.

L'exposant est décalé de 28 − 1 − 1 = 127 dans ce cas. L'exposant va donc de -126 à +127. Un exposant de -127 serait décalé vers la valeur 0, mais celle-ci est réservée pour 0 et les nombres dé-normalisés. Un exposant de 128 serait décalé vers 255, qui est réservé pour coder les infinis, et les NaNs. (voir le tableau précédent)

Pour les nombres normalisés (la plupart), Exp est l'exposant décalé et Fraction est la partie fractionnelle de la partie significative. Le nombre a la valeur suivante :

v = s × 2e × m

Avec

s = +1 (nombre positif) lorsque le bit de signe est nul.

s = −1 (nombre négatif) lorsque le bit de signe est à 1.

e = Exp − 127 (en d'autres mots, l'exposant est stocké avec 127 ajouté, autrement dit, "décalé de 127")

m = 1,fraction (en binaire). D'où 1 ≤ m < 2.

Dans l'exemple précédent, le signe est nul, l'exposant est -3, et la partie significative est 1,01 (ce qui donne 1 × 2−0 + 0 × 2−1 + 1 × 2−2 = 1,25 en décimal). Le nombre représenté est donc +1,25 × 2−3, ce qui donne +0,15625.

Remarques :

  • Les nombres dénormalisés suivent le même principe, sauf que e = −126 et m=0,fraction. (Attention: e n'est pas -127 mais -126, ceci afin de garantir la continuité de cette représentation avec la représentation normalisée, puisque m=0,fraction et non plus m=1,fraction.)
  • −126 est la plus petite valeur possible pour l'exposant d'un nombre normalisé.
  • Il y a deux 0 : +0 et −0 selon la valeur de S
  • Il y a deux infinis : +∞ et −∞ selon la valeur de S
  • Les NaNs peuvent avoir un signe et une partie significative, mais ils n'ont pas de sens, sauf pour la correction d'erreurs.
  • les NaNs et les infinis n'ont que des 1 dans le champ "exposant".
  • Le plus petit nombre positif différent de zéro, et le plus grand nombre négatif différent de zéro (représentés par une valeur dénormalisée avec tous les bits du champ exposant à 0 et la valeur binaire 1 dans le champ Fraction) sont :
    ±2−149 ≈ ±1,4012985×10−45
  • Le plus petit nombre positif normalisé différent de zéro, et le plus grand nombre négatif normalisé différent de zéro (représentés par la valeur binaire 1 dans le champ Exp, et 0 dans le champ Fraction) sont :
    ±2−126 ≈ ±1,175494351×10−38
  • Le plus grand nombre positif fini, et le plus petit nombre négatif fini (représenté par la valeur 254 dans le champ Exp et tous les bits à 1 dans le champ Fraction) sont :
    ±(224-1) × 2104 ≈ ±3,4028235×1038

Voici un tableau résumant la partie précédente, avec des exemples de nombres 32 bits simple précision.

Type Exposant Mantisse Valeur
Zéro 0000 0000 000 0000 0000 0000 0000 0000 0,0
1 0111 1111 000 0000 0000 0000 0000 0000 1,0
Nombre dénormalisé 0000 0000 100 0000 0000 0000 0000 0000 5,9×10−39
Grand nombre normalisé 1111 1110 111 1111 1111 1111 1111 1111 3,4×1038
Petit nombre normalisé 0000 0001 000 0000 0000 0000 0000 0000 1,18×10−38
Infini 1111 1111 000 0000 0000 0000 0000 0000 Infini
NaN 1111 1111 010 0000 0000 0000 0000 0000 NaN

Un exemple plus complexe

Codons le nombre décimal −118,625 en utilisant le mécanisme IEEE 754.

  1. Premièrement, nous avons besoin du signe, de l'exposant et de la partie fractionnaire. C'est un nombre négatif, le signe est donc "1".
  2. Puis nous écrivons le nombre (sans le signe) en binaire. Nous obtenons 1110110,101.
  3. Ensuite, nous décalons la virgule vers la gauche, de façon à ne laisser qu'un 1 sur sa gauche : 1110110,101 (bin) = 1,110110101 (bin) × 26. C'est un nombre flottant normalisé : la mantisse est la partie à droite de la virgule, remplie de 0 vers la droite pour obtenir 23 bits. Cela donne 110 1101 0100 0000 0000 0000 (on omet le 1 avant la virgule, qui est implicite).
  4. L'exposant est égal à 6, et nous devons le convertir en binaire et le décaler. Pour le format 32-bit IEEE 754, le décalage est 28-1-1 = 127. Donc 6 + 127 = 133 (dec) = 1000 0101 (bin).

On a donc −118,625 (dec) = 1100 0010 1110 1101 0100 0000 0000 0000 (float) = C2ED4000 (hexa)

Double-précision 64 bits

Représentation double précision flottants IEEE 754

Le format double précision est identique au simple précision, mis à part le fait que les champs sont plus grands. En effet, il possède 52 bits de mantisse, et 11 bits d'exposant.

La mantisse est très élargie, alors que l'exposant est peu élargi. Ceci est dû au fait que, selon les créateurs du standard, la précision est plus importante que l'amplitude.

Les NaNs et les infinis sont représentés en mettant tous les bits de l'exposant à 1 (2047).

Pour les nombres normalisés, le décalage de l'exposant est +1023. Pour les nombres dénormalisés, l'exposant est −1022 (l'exposant minimum pour un nombre normalisé. ce n'est pas −1023 car les nombres normalisés ont un 1 avant la virgule, et les nombres dénormalisés n'en ont pas. Comme précédemment, zéro et l'infini sont signés.

Remarques :

  • Le plus petit nombre positif différent de zéro, et le plus grand nombre négatif différent de zéro (représentés par une valeur dénormalisée avec tous les bits du champ Exposant à 0 et la valeur binaire 1 dans le champ Fraction) sont :
    ±2−1074 ≈ ±5×10−324
  • Le plus petit nombre positif normalisé différent de zéro, et le plus grand nombre négatif normalisé différent de zéro (représentés par la valeur binaire 1 dans le champ Exp, et 0 dans le champ Fraction sont :
    ±2−1022 ≈ ±2,2250738585072020×10−308
  • Le plus grand nombre positif fini, et le plus petit nombre négatif fini (représenté par la valeur 2046 dans le champ Exp et tous les bits à 1 dans le champ Fraction) sont :
    ±(21024 − 2971) ≈ ±1,7976931348623157×10308

Comparer des nombres flottants

Il est généralement préférable de comparer des nombres flottants en utilisant les instructions de calcul flottant. Cependant, cette représentation rend les comparaisons de certains sous-ensembles possible octet par octet, s’ils ont le même ordre d'octets et le même signe, et que les NaNs sont exclus.

Par exemple, pour deux nombres flottants positifs a et b, la comparaison entre a et b (>, <, ou ==) donne les mêmes résultats que la comparaison de deux nombres signés (ou non signés) avec les mêmes bits que a et b. En d'autres mots, deux nombres flottants positifs (qui ne sont pas des NaN) peuvent être comparés avec une comparaison binaire signée (ou non signée). À cause du problème d'ordre des octets, cette comparaison ne peut pas être utilisée dans du code portable.

Arrondir les nombres flottants

Le standard IEEE spécifie quatre modes d'arrondi.

  • Au plus près Si le nombre est entre deux, il est arrondi à la valeur la plus proche avec un bit de poids faible à 0. C'est le mode d'arrondi par défaut.
  • Vers zéro
  • Vers plus l'infini
  • Vers moins l'infini

Révision du standard

En juin 2008, une révision majeure des normes IEEE 754 et IEEE 854 a été approuvée par l'IEEE. Voir : IEEE 754r (en)[1][2].

Notes et références

Voir aussi

  • Intel 8087, premiers coprocesseurs mathématiques Intel 1980 et première implémentation.
  • Virgule flottante, représentation des nombres la plus souvent utilisée dans un ordinateur.
  • NaN, « Not a Number », en français « pas un nombre » ; résultat d'une opération arithmétique invalide.
  • IEEE 754-1985 (en), standard pour la représentation des nombres à virgule flottante en binaire.
  • IEEE 754-2008 (en), révision majeure de la norme IEEE 754-1985 et groupe de travail IEEE 754r.
  • -0 (nombre) (en) zéro négatif.

Liens externes

Bibliographie

Voir aussi la liste d'articles (en anglais) sur la page du groupe chargé de la révision du standard.

  • IEEE, Standard IEEE-754
  • David Goldberg, What Every Computer Scientist Should Know about Floating-Point Arithmetic
Ce document provient de « IEEE 754 ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article IEEE-754 de Wikipédia en français (auteurs)

Игры ⚽ Нужно сделать НИР?

Regardez d'autres dictionnaires:

  • Ieee 754 — L’IEEE 754 est un standard pour la représentation des nombres à virgule flottante en binaire. Il est le plus employé actuellement pour le calcul des nombres à virgule flottante dans le domaine informatique, avec les CPU et les FPU. Le standard… …   Wikipédia en Français

  • IEEE 754 — Die Norm IEEE 754 (ANSI/IEEE Std 754 1985; IEC 60559:1989 International version) definiert Standarddarstellungen für binäre Gleitkommazahlen in Computern und legt genaue Verfahren für die Durchführung mathematischer Operationen, insbesondere für… …   Deutsch Wikipedia

  • IEEE 754 — L’IEEE 754 est un standard pour la représentation des nombres à virgule flottante en binaire. Il est le plus employé actuellement pour le calcul des nombres à virgule flottante dans le domaine informatique, avec les CPU et les FPU. Le standard… …   Wikipédia en Français

  • IEEE 754-2008 — IEEE 754 широко распространённый стандарт формата представления чисел с плавающей точкой, используемый как в программных реализациях арифметических действий, так и во многих аппаратных (CPU и FPU) реализациях. Многие компиляторы языков… …   Википедия

  • IEEE 754 revision — This article describes the revision process of the IEEE 754 standard, 2000 2008, and the changes included in the revision. For a description of the standard itself, see IEEE 754 2008. IEEE 754 2008 (previously known as IEEE 754r ) was published… …   Wikipedia

  • IEEE 754-1985 — The IEEE Standard for Binary Floating Point Arithmetic (IEEE 754) is the most widely used standard for floating point computation, and is followed by many CPU and FPU implementations. The standard defines formats for representing floating point… …   Wikipedia

  • IEEE 754-2008 — The IEEE Standard for Floating Point Arithmetic (IEEE 754) is the most widely used standard for floating point computation, and is followed by many hardware (CPU and FPU) and software implementations. Many computer languages allow or require that …   Wikipedia

  • IEEE 754-2008 — Der Standard IEEE 754 2008, der früherer Arbeitstitel lautete IEEE 754r, ist eine notwendig gewordene Revision des 1985 verabschiedeten Gleitkommastandards IEEE 754. Der alte Standard war sehr erfolgreich und wurde in zahlreichen Prozessoren und… …   Deutsch Wikipedia

  • IEEE 754 — …   Википедия

  • IEEE 754r — ist eine notwendig gewordene Revision des vor etwa 20 Jahren (1985) verabschiedeten Gleitkommastandards IEEE 754. Der alte Standard war sehr erfolgreich und wurde in zahlreichen Prozessoren und Programmiersprachen übernommen. Die Diskussion über… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”