Boîte à outils |
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 laquelle une exception se produit, et ce qu'il se passe dans ce cas). Formats de nombre flottants :
Les quatre modes d'arrondi :
La norme IEEE 754 définit 4 formats pour représenter des nombres à virgule flottante : simple précision (32-bit), double précision (64-bit), simple précision étendue (≥ 43-bit, peu utilisé) et double précision étendue (≥ 79-bit, souvent implémenté avec 80 bits). Par exemple, dans le langage C, le float utilise le format simple précision, et le double utilise le format double précision. 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]
[modifier] Format d'un nombre en virgule flottante[modifier] Conventions utilisées dans l'articleDans 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é). [modifier] Format généralUn 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. [modifier] Décalage de l'exposantL'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é. [modifier] ExceptionsLe 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 :
Nous pouvons le résumer ainsi :
[modifier] Format simple précision (32 bits)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,25 en décimal). Le nombre représenté est donc +1,25 × 2−3, ce qui donne +0,15625. Remarques:
Voici un tableau résumant la partie précédente, avec des exemples de nombres 32 bits simple précision.
[modifier] Un exemple plus complexeCodons le nombre décimal −118,625 en utilisant le mécanisme IEEE 754.
C 2 E D 4 0 0 0 (hexa)
On a donc −118,625 (dec) = 1100 0010 1110 1101 0100 0000 0000 0000 (float) [modifier] Double-précision 64 bitsLe 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 du 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:
[modifier] Comparer des nombres flottantsIl 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ême 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'autre 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. [modifier] Arrondir les nombre flottantsLe standard IEEE spécifie quatre modes d'arrondi.
[modifier] Révision du standardEn 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]. [modifier] Notes et références
[modifier] Voir aussi
[modifier] Liens externes[modifier] BibliographieVoir aussi la liste d'articles (en anglais) sur la page du groupe chargé de la révision du standard.
|