Révision IEEE 754-2008 - IEEE 754-2008 revision

IEEE 754-2008 (anciennement connu sous le nom 754r IEEE ) a été publié en Août 2008 et est une révision importante et remplace, l' IEEE 754-1985 à virgule flottante norme , alors qu'en 2019 il a été mis à jour avec une révision mineure IEEE 754-2019 . La révision de 2008 a étendu la norme précédente là où c'était nécessaire, a ajouté l'arithmétique et les formats décimaux, a resserré certaines zones de la norme d'origine qui n'étaient pas définies et a fusionné dans IEEE 854 (la norme à virgule flottante indépendante de la base).

Dans quelques cas, où des définitions plus strictes de l'arithmétique binaire à virgule flottante pouvaient être incompatibles avec certaines implémentations existantes, elles ont été rendues facultatives.

Processus de révision

La norme était en cours de révision depuis 2000, avec une date d'achèvement cible de décembre 2006. La révision d'une norme IEEE suit globalement trois phases :

  1. Groupe de travail – un comité qui crée un projet de norme
  2. Bulletin de vote – les parties intéressées souscrivent au groupe de vote et votent sur le projet (75 % du groupe doit participer et 75 % doivent approuver pour que le projet aille de l'avant) ; les commentaires des votes sont résolus par un comité de résolution des bulletins de vote (BRC) et les modifications apportées doivent être recirculées avec un nouveau bulletin de vote s'ils sont substantiels
  3. Lorsque tous les commentaires sont résolus et qu'il n'y a pas d'autres changements, le projet est soumis à l'IEEE pour examen, approbation et publication (cela peut également entraîner des changements et des votes, bien que cela soit rare).

Le 11 juin 2008, il a été approuvé à l'unanimité par le IEEE Revision Committee (RevCom), et il a été formellement approuvé par le IEEE-SA Standards Board le 12 juin 2008. Il a été publié le 29 août 2008.

Phase du groupe de travail 754r

La participation à la rédaction de la norme était ouverte aux personnes ayant une solide connaissance de l'arithmétique à virgule flottante. Plus de 90 personnes ont assisté à au moins une des réunions mensuelles, qui se sont tenues dans la Silicon Valley , et bien d'autres ont participé via la liste de diffusion.

Les progrès ont parfois été lents, ce qui a conduit le président à déclarer lors de la réunion du 15 septembre 2005 qu'"aucun progrès n'est fait, je suspends ces réunions jusqu'à nouvel ordre pour ces motifs". En décembre 2005, le comité s'est réorganisé selon de nouvelles règles avec une date d'achèvement cible de décembre 2006.

De nouvelles politiques et procédures ont été adoptées en février 2006. En septembre 2006, un projet de travail a été approuvé pour être envoyé au comité de parrainage des parents (le IEEE Microprocessor Standards Committee, ou MSC) pour édition et pour être envoyé au vote des sponsors.

754r Phase de scrutin

La dernière version du projet, la version 1.2.5, soumise au MSC date du 4 octobre 2006. Le MSC a accepté le projet le 9 octobre 2006. Le projet a été considérablement modifié en détail au cours du processus de vote.

Le premier scrutin des sponsors a eu lieu du 29 novembre 2006 au 28 décembre 2006. Sur les 84 membres du corps votant, 85,7% ont répondu—78,6% ont voté pour l'approbation. Il y a eu des votes négatifs (et plus de 400 commentaires) donc il y a eu un vote de recirculation en mars 2007 ; cela a reçu une approbation de 84%. Il y avait suffisamment de commentaires (plus de 130) de ce scrutin qu'un troisième projet a été préparé pour le deuxième scrutin de recirculation de 15 jours qui a commencé à la mi-avril 2007. Pour une raison technique, le processus de scrutin a été relancé avec le 4e scrutin en octobre. 2007 ; il y avait également des changements substantiels dans le projet résultant des commentaires de 650 votants et des demandes du sponsor (l'IEEE MSC) ; ce scrutin n'a tout simplement pas atteint l'approbation requise de 75 %. Le 5e scrutin a obtenu un taux de réponse de 98,0 % avec une approbation de 91,0 %, les commentaires entraînant des changements relativement mineurs. Les 6e, 7e et 8e tours de scrutin ont obtenu des taux d'approbation de plus de 90 % avec progressivement moins de commentaires sur chaque projet ; le 8e (qui n'avait aucun commentaire dans le champ d'application : 9 étaient des répétitions de commentaires précédents et un faisait référence à du matériel ne figurant pas dans le projet) a été soumis au Comité de révision des normes IEEE (« RevCom ») pour approbation en tant que norme IEEE.

754r Phase d'examen et d'approbation

Le Comité de révision des normes IEEE (RevCom) a examiné et approuvé à l'unanimité le projet IEEE 754r lors de sa réunion de juin 2008, et il a été approuvé par le Conseil des normes IEEE-SA le 12 juin 2008. L'édition finale est terminée et le document a maintenant été transmis à le Département des publications des normes IEEE pour publication.

Publication de la norme IEEE 754-2008

La nouvelle IEEE 754 (anciennement IEEE Std 754-2008, la norme IEEE pour l'arithmétique à virgule flottante) a été publiée par l'IEEE Computer Society le 29 août 2008 et est disponible sur le site Web IEEE Xplore.

Cette norme remplace IEEE 754-1985 . IEEE 854, la norme à virgule flottante Radix-Independent a été retirée en décembre 2008.

Résumé des révisions

Les améliorations les plus évidentes apportées à la norme sont l'ajout d'un type binaire 16 bits et 128 bits et de trois types décimaux, de nouvelles opérations et de nombreuses fonctions recommandées. Cependant, il y a eu des clarifications importantes dans la terminologie tout au long. Ce résumé met en évidence les principales différences dans chaque clause majeure de la norme.

Article 1 : Aperçu

La portée (déterminée par le sponsor de la norme) a été élargie pour inclure les formats décimaux et arithmétiques, et ajoute des formats extensibles.

Article 2 : Définitions

De nombreuses définitions ont été réécrites pour plus de clarté et de cohérence. Quelques termes ont été renommés pour plus de clarté (par exemple, denormalized a été renommé en subnormal ).

Article 3 : Formats

La description des formats a été rendue plus régulière, avec une distinction entre les formats arithmétiques (dans lesquels l'arithmétique peut être effectuée) et les formats d'échange (qui ont un codage standard). La conformité à la norme est désormais définie en ces termes.

Les niveaux de spécification d'un format à virgule flottante ont été énumérés, pour clarifier la distinction entre :

  1. les nombres réels théoriques (une droite numérique étendue)
  2. les entités qui peuvent être représentées dans le format (un ensemble fini de nombres, avec −0 , des infinis et NaN )
  3. les représentations particulières des entités : signe-exposant-signifiant, etc.
  4. le motif binaire (codage) utilisé.

Les ensembles d'entités représentables sont ensuite expliqués en détail, montrant qu'ils peuvent être traités avec la mantisse étant considérée soit comme une fraction, soit comme un entier. Les ensembles particuliers connus sous le nom de formats de base sont définis et les codages utilisés pour l'échange de formats binaires et décimaux sont expliqués.

Les formats d'échange binaires ont la « demi-précision » (format de stockage 16 bits) et la « précision quadruple » (format 128 bits) ajoutées, ainsi que des formules généralisées pour certains formats plus larges ; les formats de base ont des encodages 32 bits, 64 bits et 128 bits.

Trois nouveaux formats décimaux sont décrits, correspondant aux longueurs des formats binaires 32 à 128 bits. Ceux-ci donnent des formats d'échange décimaux avec des significandes à 7, 16 et 34 chiffres, qui peuvent être normalisés ou non. Pour une portée et une précision maximales, les formats fusionnent une partie de l'exposant et de la mantisse dans un champ de combinaison et compressent le reste de la mantisse à l'aide d'un codage entier décimal (qui utilise Densely Packed Decimal , ou DPD, une forme compressée de BCD ) ou un codage d'entier binaire conventionnel . Les formats de base sont les deux plus grandes tailles, qui ont des encodages 64 bits et 128 bits. Des formules généralisées pour certains autres formats d'échange sont également spécifiées.

Les formats étendus et extensibles permettent l'arithmétique à d'autres précisions et plages.

Article 4 : Attributs et arrondis

Cette clause a été modifiée pour encourager l'utilisation d'attributs statiques pour contrôler les opérations à virgule flottante et (en plus des attributs d'arrondi requis) permettre une gestion alternative des exceptions, l'élargissement des résultats intermédiaires, des optimisations de changement de valeur et la reproductibilité.

L' attribut d'arrondi au plus proche, s'éloignant de zéro, a été ajouté (requis pour les opérations décimales uniquement).

Article 5 : Opérations

Cette section contient de nombreuses clarifications (notamment dans le domaine des comparaisons), et plusieurs opérations précédemment recommandées (telles que copier, nier, abs et classe) sont désormais nécessaires.

Les nouvelles opérations incluent la multiplication-addition fusionnée (FMA), les conversions explicites, les prédicats de classification (isNan( x ), etc.), diverses fonctions min et max, un prédicat de classement total et deux opérations spécifiques à la décimale (même quantum et quantification).

Min et max

Les opérations min et max sont définies mais laissent une certaine marge de manœuvre pour le cas où les entrées sont égales en valeur mais diffèrent en représentation. En particulier:

  • min(+0,−0)ou min(−0,+0)doit produire quelque chose avec une valeur de zéro mais peut toujours retourner le premier argument.

Afin de prendre en charge des opérations telles que le fenêtrage dans lesquelles une entrée NaN doit être remplacée discrètement par l'un des points de fin, min et max sont définis pour sélectionner un nombre, x , de préférence à un NaN silencieux :

  • min(x,qNaN) = min(qNaN,x) = x
  • max(x,qNaN) = max(qNaN,x) = x

Ces fonctions sont appelées minNum et maxNum pour indiquer leur préférence pour un nombre plutôt qu'un NaN silencieux. Cependant, en présence d'une entrée NaN de signalisation, un NaN silencieux est renvoyé comme avec les opérations habituelles. Après la publication de la norme, il a été constaté que ces règles rendent ces opérations non associatives ; pour cette raison, ils ont été remplacés par de nouvelles opérations dans IEEE 754-2019 .

Arithmétique décimale

L'arithmétique décimale, compatible avec celle utilisée en Java , C# , PL/I , COBOL , Python , REXX , etc., est également définie dans cette section. En général, l'arithmétique décimale suit les mêmes règles que l'arithmétique binaire (les résultats sont correctement arrondis, etc.), avec des règles supplémentaires qui définissent l'exposant d'un résultat (plus d'un est possible dans de nombreux cas).

Conversion de base correctement arrondie

Contrairement à 854, 754-2008 nécessite une conversion de base correctement arrondie entre la virgule flottante décimale et binaire dans une plage qui dépend du format.

Article 6 : Infini, NaN et bit de signe

Cette clause a été révisée et clarifiée, mais sans ajouts majeurs. En particulier, il fait des recommandations formelles pour le codage de l'état de signalisation/ NaN calme .

Clause 7 : Gestion des exceptions par défaut

Cette clause a été révisée et considérablement clarifiée, mais sans ajouts majeurs.

Article 8 : gestion alternative des exceptions

Cette clause a été étendue par rapport à la clause 8 précédente (« Pièges ») pour permettre la gestion facultative des exceptions sous diverses formes, y compris les pièges et d'autres modèles tels que try/catch. Les pièges et autres mécanismes d'exception restent facultatifs, comme ils l'étaient dans IEEE 754-1985.

Article 9 : Opérations recommandées

Cette clause est nouvelle; il recommande une cinquantaine d'opérations, y compris les fonctions log, puissance et trigonométriques, que les normes de langage devraient définir. Ceux-ci sont tous facultatifs (aucun n'est requis pour se conformer à la norme). Les opérations comprennent certaines sur les modes dynamiques des attributs, ainsi qu'un ensemble d'opérations de réduction (somme, produit mis à l'échelle, etc.).

Article 10 : Évaluation des expressions

Cette clause est nouvelle; il recommande la manière dont les normes de langage doivent spécifier la sémantique des séquences d'opérations et souligne les subtilités des significations littérales et des optimisations qui modifient la valeur d'un résultat.

Article 11 : Reproductibilité

Cette clause est nouvelle; il recommande que les normes de langage fournissent un moyen d'écrire des programmes reproductibles (c'est-à-dire des programmes qui produiront le même résultat dans toutes les implémentations d'un langage), et décrit ce qui doit être fait pour obtenir des résultats reproductibles.

Annexe A : Bibliographie

Cette annexe est nouvelle ; il répertorie quelques références utiles.

Annexe B : Prise en charge du débogage du programme

Cette annexe est nouvelle ; il fournit des conseils aux développeurs de débogueurs pour les fonctionnalités souhaitées pour prendre en charge le débogage de code à virgule flottante.

Index des opérations

Il s'agit d'un nouvel index, qui répertorie toutes les opérations décrites dans la norme (obligatoires ou facultatives).

Discuté mais non inclus

En raison de changements dans la conception et le développement du processeur, la norme à virgule flottante IEEE de 2008 pourrait être considérée comme historique ou obsolète comme la norme de 1985 qu'elle a remplacée. Il y a eu de nombreuses discussions extérieures et des éléments non couverts dans le processus de normalisation, les éléments ci-dessous sont ceux qui sont devenus de notoriété publique :

  • L'annexe "L" recommandait aux développeurs de langages comment lier les éléments de la norme aux fonctionnalités d'un langage.
  • L'annexe « U » fournissait des indications sur le choix des définitions numériques de sous-verse.
En 754, la définition de l'underflow était que le résultat est minuscule et rencontre une perte de précision.
Deux définitions étaient autorisées pour la détermination de la condition « minuscule » : avant ou après arrondi du résultat infiniment précis à la précision de travail, avec exposant non borné.
Deux définitions de la perte de précision étaient autorisées : résultat inexact ou perte due uniquement à la dénormalisation. Aucun système matériel connu n'a implémenté ce dernier et il a été supprimé de la norme révisée en tant qu'option.
L'Annexe U du 754r recommandait que seules les petitesses après arrondi et l'inexactitude en tant que perte de précision soient une cause de signal de sous-débordement.
  • L'annexe "Z" a introduit des types de données facultatifs pour prendre en charge d'autres formats à virgule flottante à largeur fixe, ainsi que des formats de précision arbitraire (c'est-à-dire où la précision de la représentation et de l'arrondi est déterminée au moment de l'exécution) - une partie de ce matériel a été déplacée dans le corps du projet en généralisant l'article 5. La précision arbitraire a été abandonnée.
  • Héritage et propagation des modes (traitement des exceptions, présubstitution, arrondi) et des drapeaux (inexact, sous-dépassement, dépassement, division par zéro, invalide). Le désir est que les drapeaux se propagent vers un appelant ; et les changements de mode peuvent être hérités par un appelé, mais n'affectent pas l'appelant.
  • L'intervalle et d'autres arithmétiques ont été discutés mais n'ont pas été inclus comme étant hors de portée (et un gros travail à part entière). Les travaux commencent en 2008 sur une proposition de norme IEEE pour l'arithmétique des intervalles.

Les références

Liens externes