IEEE754 - IEEE 754

Der IEEE-Standard für Gleitkomma-Arithmetik ( IEEE 754 ) ist ein technischer Standard für Gleitkomma-Arithmetik , der 1985 vom Institute of Electrical and Electronics Engineers (IEEE) aufgestellt wurde. Der Standard adressierte viele Probleme, die in den verschiedenen Gleitkomma-Implementierungen gefunden wurden, die es schwierig machten, sie zuverlässig und portabel zu verwenden . Viele Hardware- Gleitkommaeinheiten verwenden den IEEE 754-Standard.

Die Norm definiert:

  • arithmetische Formate: Sätze von binären und dezimalen Gleitkommadaten, die aus endlichen Zahlen (einschließlich Nullen mit Vorzeichen und subnormalen Zahlen ), Unendlichkeiten und speziellen "keine Zahl"-Werten ( NaNs ) bestehen.
  • Austauschformate: Kodierungen (Bitstrings), die verwendet werden können, um Fließkommadaten in einer effizienten und kompakten Form auszutauschen
  • Rundungsregeln: Zu erfüllende Eigenschaften beim Runden von Zahlen bei Arithmetik und Umrechnungen
  • Operationen: arithmetische und andere Operationen (wie trigonometrische Funktionen ) auf arithmetischen Formaten
  • Ausnahmebehandlung: Hinweise auf Ausnahmebedingungen (z. B. Division durch Null , Überlauf usw. )

IEEE 754-2008 , veröffentlicht im August 2008, enthält fast den gesamten ursprünglichen IEEE 754-1985- Standard sowie den IEEE 854-1987-Standard für Radix-Independent Floating-Point Arithmetic . Die aktuelle Version, IEEE 754-2019, wurde im Juli 2019 veröffentlicht. Es handelt sich um eine geringfügige Überarbeitung der vorherigen Version, die hauptsächlich Klarstellungen, Fehlerbehebungen und neue empfohlene Operationen enthält.

Standardentwicklung

Der erste Standard für Gleitkommaarithmetik, IEEE 754-1985 , wurde 1985 veröffentlicht. Er deckte nur binäre Gleitkommaarithmetik ab.

Eine neue Version, IEEE 754-2008 , wurde im August 2008 nach einem siebenjährigen Überarbeitungsprozess unter dem Vorsitz von Dan Zuras und herausgegeben von Mike Cowlishaw veröffentlicht . Es ersetzte sowohl den IEEE 754-1985 (binäre Gleitkommaarithmetik) als auch den IEEE 854-1987 Standard für Radix-Independent Floating-Point Arithmetic . Die Binärformate des ursprünglichen Standards sind zusammen mit drei neuen Basisformaten, einem Binär- und zwei Dezimalformaten, in diesem neuen Standard enthalten. Um dem aktuellen Standard zu entsprechen, muss eine Implementierung mindestens eines der Basisformate sowohl als arithmetisches Format als auch als Austauschformat implementieren.

Der internationale Standard ISO/IEC/IEEE 60559:2011 (mit identischem Inhalt wie IEEE 754-2008) wurde durch JTC1 /SC 25 im Rahmen des ISO/IEEE PSDO Agreement zur Übernahme freigegeben und veröffentlicht.

Die aktuelle Version, IEEE 754-2019, veröffentlicht im Juli 2019, leitet sich von IEEE 754-2008 ab und ersetzt sie nach einem im September 2015 begonnenen Überarbeitungsprozess unter dem Vorsitz von David G. Hough und herausgegeben von Mike Cowlishaw. Es enthält hauptsächlich Klarstellungen (zB totalOrder ) und Fehlerbehebungen (zB minNum ), aber auch einige neue empfohlene Operationen (zB augmentedAddition ).

Der internationale Standard ISO/IEC 60559:2020 (mit identischem Inhalt wie IEEE 754-2019) wurde durch JTC1 /SC 25 zur Übernahme freigegeben und veröffentlicht.

Formate

Ein IEEE 754- Format ist ein "Satz von Darstellungen von numerischen Werten und Symbolen". Ein Format kann auch beinhalten, wie der Satz codiert ist.

Ein Gleitkommaformat wird angegeben durch:

  • eine Basis (auch Radix genannt ) b , die in IEEE 754 entweder 2 (binär) oder 10 (dezimal) ist;
  • eine Genauigkeit p ;
  • ein Exponentenbereich von emin bis emax , mit emin = 1 − emax für alle IEEE 754-Formate.

Ein Format umfasst:

  • Endliche Zahlen, die durch drei ganze Zahlen beschrieben werden können: s  = ein Vorzeichen (Null oder Eins), c  = ein Signifikand (oder Koeffizient ) mit nicht mehr als p Stellen, wenn er zur Basis b geschrieben wird (dh eine ganze Zahl im Bereich bis 0 bis b p  - 1), und Q  = ein Exponent , so daß eminq  +  p  - 1 ≤ Emax . Der Zahlenwert einer solchen endlichen Zahl ist (−1) s × c × b q . Darüber hinaus gibt es zwei Nullwerte, die als Nullen mit Vorzeichen bezeichnet werden: Das Vorzeichenbit gibt an, ob eine Null +0 (positive Null) oder –0 (negative Null) ist.
  • Zwei Unendlichkeiten: +∞ und −∞.
  • Zwei Arten von NaN (not-a-number): ein ruhiges NaN (qNaN) und ein signalisierendes NaN (sNaN).

Wenn beispielsweise b = 10, p = 7 und emax = 96, dann emin = −95, erfüllt der Signifikand 0 ≤ c9 999 999 , und der Exponent erfüllt −101 ≤ q ≤ 90. Folglich ist die kleinste darstellbare positive Zahl ungleich Null 1×10 –101 , und die größte ist 9999999×10 90 (9,999999×10 96 ), der gesamte Zahlenbereich ist also −9.999999×10 96 bis 9.999999×10 96 . Die Zahlen − b 1− emax und b 1− emax (hier −1×10 −95 und 1×10 −95 ) sind die kleinsten (in der Größenordnung) normalen Zahlen ; Zahlen ungleich Null zwischen diesen kleinsten Zahlen werden subnormale Zahlen genannt .

Darstellung und Kodierung im Gedächtnis

Einige Zahlen können mehrere mögliche Darstellungen im exponentiellen Format haben. Wenn beispielsweise b  = 10 und p  = 7, dann kann –12.345 durch –12345×10 –3 , –123450×10 –4 und –1234500×10 –5 dargestellt werden . Bei den meisten Operationen, wie beispielsweise arithmetischen Operationen, hängt das Ergebnis (Wert) jedoch nicht von der Darstellung der Eingaben ab.

Für die Dezimalformate ist jede Darstellung gültig, und die Menge dieser Darstellungen wird Kohorte genannt . Wenn ein Ergebnis mehrere Darstellungen haben kann, legt der Standard fest, welches Mitglied der Kohorte ausgewählt wird.

Bei den binären Formaten wird die Darstellung eindeutig gemacht, indem der kleinste darstellbare Exponent gewählt wird, der eine exakte Darstellung des Werts ermöglicht. Außerdem wird der Exponent nicht direkt dargestellt, sondern es wird ein Bias hinzugefügt, sodass der kleinste darstellbare Exponent als 1 dargestellt wird, wobei 0 für subnormale Zahlen verwendet wird. Bei Zahlen mit einem Exponenten im normalen Bereich (das Exponentenfeld ist weder aus Einsen noch aus Nullen), ist das führende Bit des Signifikanden immer 1. Folglich kann eine führende 1 impliziert werden, anstatt explizit in der Speichercodierung vorhanden zu sein, und nach dem Standard wird der explizit dargestellte Teil des Signifikanten zwischen 0 und 1 liegen. Diese Regel wird als führende Bitkonvention , implizite Bitkonvention oder versteckte Bitkonvention bezeichnet . Diese Regel ermöglicht dem Binärformat eine zusätzliche Genauigkeit. Die Konvention für führende Bits kann nicht für subnormale Zahlen verwendet werden, da sie einen Exponenten außerhalb des normalen Exponentenbereichs haben und mit dem kleinsten repräsentierten Exponenten skaliert werden, der für die kleinsten normalen Zahlen verwendet wird.

Aufgrund der Möglichkeit mehrerer Kodierungen (zumindest in Formaten, die als Austauschformate bezeichnet werden ), kann eine NaN andere Informationen enthalten: ein Vorzeichenbit (das keine Bedeutung hat, aber von einigen Operationen verwendet werden kann) und eine Nutzlast , die für die Diagnose gedacht ist Informationen, die die Quelle des NaN angeben (aber die Nutzlast kann andere Verwendungen haben, wie zum Beispiel NaN-Boxen ).

Basis- und Austauschformate

Der Standard definiert fünf grundlegende Formate, die nach ihrer numerischen Basis und der Anzahl der Bits benannt sind, die bei ihrer Austauschcodierung verwendet werden. Es gibt drei binäre Gleitkomma-Grundformate (kodiert mit 32, 64 oder 128 Bit) und zwei dezimale Gleitkomma-Grundformate (kodiert mit 64 oder 128 Bit). Die Formate binary32 und binary64 sind die Einzel- bzw. Doppelformate von IEEE 754-1985 . Eine konforme Implementierung muss mindestens eines der Basisformate vollständig implementieren.

Der Standard definiert auch Austauschformate , die diese Basisformate verallgemeinern. Für die Binärformate ist die führende Bitkonvention erforderlich. Die folgende Tabelle fasst die kleinsten Austauschformate (einschließlich der Basisformate) zusammen.

Name Gemeinsamen Namen Base Signifikante Bits oder Ziffern Dezimalziffern Exponentenbits Dezimal E max Exponenten-Bias E min E max Anmerkungen
binär16 Halbe Präzision 2 11 3.31 5 4,51 2 4 -1 = 15 -14 +15 nicht einfach
binär32 Mit einfacher Genauigkeit 2 24 7,22 8 38,23 2 7 −1 = 127 -126 +127
binär64 Doppelte Genauigkeit 2 53 15.95 11 307,95 2 10 −1 = 1023 -1022 +1023
binär128 Vierfache Präzision 2 113 34.02 fünfzehn 4931.77 2 14 −1 = 16383 −16382 +16383
binär256 Achtfache Präzision 2 237 71,34 19 78913.2 2 18 −1 = 262143 −262142 +262143 nicht einfach
dezimal32 10 7 7 7,58 96 101 −95 +96 nicht einfach
dezimal64 10 16 16 9,58 384 398 -383 +384
dezimal128 10 34 34 13.58 6144 6176 −6143 +6144

Beachten Sie, dass in der obigen Tabelle die angegebenen Mindestexponenten für normale Zahlen gelten; die spezielle subnormale Zahlendarstellung ermöglicht die Darstellung noch kleinerer Zahlen (mit etwas Genauigkeitsverlust). Die kleinste positive Zahl, die in binär64 dargestellt werden kann, ist beispielsweise 2 -1074 ; Beiträge zur Zahl -1074 umfassen den E min -Wert -1022 und alle bis auf eines der 53 Signifikand-Bits (2 -1022 - (53 - 1)  = 2 -1074 ).

Dezimalziffern sind Ziffern × log 10 base . Dies ergibt eine ungefähre Genauigkeit in der Anzahl der Dezimalstellen.

Dezimal E max ist Emax × log 10 base . Dies ergibt einen ungefähren Wert des maximalen Dezimalexponenten.

Die Formate binary32 (single) und binary64 (double) sind zwei der heute am häufigsten verwendeten Formate. Die folgende Abbildung zeigt die absolute Genauigkeit für beide Formate über einen Wertebereich. Diese Zahl kann verwendet werden, um ein geeignetes Format angesichts des erwarteten Wertes einer Zahl und der erforderlichen Genauigkeit auszuwählen.

Genauigkeit von binary32 und binary64 im Bereich von 10 −12 bis 10 12


Ein Beispiel für ein Layout für 32-Bit-Gleitkomma ist

Float-Beispiel.svg

und das 64-Bit-Layout ist ähnlich .

Erweiterte und erweiterbare Präzisionsformate

Der Standard spezifiziert optional erweiterte und erweiterbare Präzisionsformate, die eine höhere Genauigkeit als die Basisformate bieten. Ein Format mit erweiterter Genauigkeit erweitert ein Basisformat, indem es mehr Genauigkeit und einen größeren Exponentenbereich verwendet. Ein erweiterbares Genauigkeitsformat ermöglicht es dem Benutzer, die Genauigkeit und den Exponentenbereich anzugeben. Eine Implementierung kann eine beliebige interne Darstellung verwenden, die sie für solche Formate wählt; alles, was definiert werden muss, sind seine Parameter ( b , p und emax ). Diese Parameter beschreiben eindeutig die Menge endlicher Zahlen (Kombinationen von Vorzeichen, Signifikand und Exponent für die gegebene Basis), die sie darstellen können.

Der Standard empfiehlt, dass Sprachstandards ein Verfahren zum Spezifizieren von p und emax für jede unterstützte Basis b bereitstellen . Der Standard empfiehlt, dass Sprachstandards und Implementierungen ein erweitertes Format unterstützen, das eine größere Genauigkeit als das größte unterstützte Basisformat für jede Radix b hat . Für ein erweitertes Format mit einer Genauigkeit zwischen zwei Grundformaten muss der Exponentenbereich so groß sein wie der des nächst breiteren Grundformats. So zum Beispiel einer 64-Bit erweiterte Präzision binäre Zahl muss eine haben ‚Emax‘ von mindestens 16383 Die x87 80-Bit erweiterten Formate diese Anforderung erfüllen.

Austauschformate

Austauschformate sind für den Austausch von Gleitkommadaten unter Verwendung einer Bitfolge fester Länge für ein bestimmtes Format vorgesehen.

Binär

Für den Austausch binärer Gleitkommazahlen sind Austauschformate der Länge 16 Bit, 32 Bit, 64 Bit und beliebige Vielfache von 32 Bit 128 definiert. Das 16-Bit-Format ist für den Austausch oder die Speicherung kleiner Zahlen (zB für Grafiken) gedacht.

Das Codierungsschema für diese binären Austauschformate ist das gleiche wie das von IEEE 754-1985: ein Vorzeichenbit, gefolgt von w Exponentenbits, die den Exponenten-Offset um einen Bias beschreiben , und p  − 1 Bits, die den Signifikanden beschreiben. Die Breite des Exponentenfeldes für ein k- Bit-Format wird berechnet als w  = round(4 log 2 ( k )) − 13. Die bestehenden 64- und 128-Bit-Formate folgen dieser Regel, aber die 16- und 32-Bit Formate haben mehr Exponentenbits (5 bzw. 8), als diese Formel liefern würde (3 bzw. 7).

Wie bei IEEE 754-1985 wird das Biased-Exponent-Feld mit allen 1-Bits gefüllt, um entweder Unendlich (nachlaufendes Signifikandenfeld = 0) oder ein NaN (nachlaufendes Signifikandenfeld ≠ 0) anzuzeigen. Für NaNs werden stille NaNs und Signalisierungs-NaNs dadurch unterschieden, dass ausschließlich das höchstwertige Bit des nachgestellten Signifikandenfeldes verwendet wird, und die Nutzdaten werden in den verbleibenden Bits getragen.

Dezimal

Für den Austausch von dezimalen Gleitkommazahlen werden Austauschformate mit einem beliebigen Vielfachen von 32 Bit definiert. Wie beim binären Austausch kodiert das Kodierungsschema für die dezimalen Austauschformate das Vorzeichen, den Exponenten und den Signifikanden. Es werden zwei verschiedene Kodierungen auf Bitebene definiert, und der Austausch wird durch die Tatsache kompliziert, dass ein externer Indikator der verwendeten Kodierung erforderlich sein kann.

Die beiden Optionen ermöglichen die Codierung des Signifikanden als komprimierte Folge von Dezimalziffern unter Verwendung von dicht gepackten Dezimalzahlen oder alternativ als binäre Ganzzahl . Ersteres ist bequemer für die direkte Hardwareimplementierung des Standards, während letzteres eher für die Softwareemulation auf einem Binärcomputer geeignet ist. In jedem Fall ist der Satz von Zahlen (Kombinationen von Vorzeichen, Signifikand und Exponent), der codiert werden kann, identisch, und spezielle Werte (±Null mit dem minimalen Exponenten, ±unendlich, ruhige NaNs und Signalisierungs-NaNs) haben identische Codierungen.

Rundungsregeln

Der Standard definiert fünf Rundungsregeln. Die ersten beiden Regeln runden auf einen nächsten Wert; die anderen werden gerichtete Rundungen genannt :

Rundungen auf nächste

  • Auf  nächsten Wert aufrunden, auf geraden Wert binden – auf den nächsten Wert runden ; fällt die Zahl in die Mitte, wird sie mit einer geraden niedrigstwertigen Ziffer auf den nächsten Wert gerundet; Dies ist der Standardwert für binäre Gleitkommazahlen und der empfohlene Standardwert für Dezimalzahlen.
  • Auf  nächsten Wert aufrunden, von Null wegbinden – auf den nächsten Wert runden ; fällt die Zahl in die Mitte, wird auf den nächsten Wert nach oben (bei positiven Zahlen) oder unten (bei negativen Zahlen) gerundet; dies ist als Option für dezimale Gleitkommazahlen gedacht.

Gezielte Rundungen

  • Auf 0 runden  – gerichtetes Runden auf Null (auch als Trunkierung bekannt ).
  • Runden nach +∞  – gerichtete Rundung in Richtung positiver Unendlichkeit (auch bekannt als Aufrunden oder Decke ).
  • Runden nach −∞  – gerichtete Rundung in Richtung negativer Unendlichkeit (auch bekannt als Abrundung oder Boden ).
Beispiel für das Runden auf ganze Zahlen unter Verwendung der IEEE 754-Regeln
Modus Beispielwert
+11,5 +12,5 -11,5 -12,5
zum nächsten, Bindungen an sogar +12.0 +12.0 -12,0 -12,0
zum nächsten, Bindungen weg von Null +12.0 +13.0 -12,0 -13,0
gegen 0 +11.0 +12.0 -11,0 -12,0
in Richtung +∞ +12.0 +13.0 -11,0 -12,0
in Richtung −∞ +11.0 +12.0 -12,0 -13,0

Sofern nicht anders angegeben, wird das Gleitkomma-Ergebnis einer Operation durch Anwendung der Rundungsfunktion auf das unendlich genaue (mathematische) Ergebnis bestimmt. Eine solche Operation wird als richtig gerundet bezeichnet . Diese Anforderung wird als korrekte Rundung bezeichnet .

Erforderliche Operationen

Zu den erforderlichen Operationen für ein unterstütztes arithmetisches Format (einschließlich der Basisformate) gehören:

  • Arithmetische Operationen (Addieren, Subtrahieren, Multiplizieren, Dividieren, Quadratwurzel, fusioniertes Multiplizieren–Addieren , Rest)
  • Konvertierungen (zwischen Formaten, in und von Strings usw. )
  • Skalierung und (bei dezimaler) Quantisierung
  • Zeichen kopieren und manipulieren (abs, negieren, etc. )
  • Vergleiche und Gesamtbestellung
  • Klassifizierung und Prüfung auf NaNs usw.
  • Testen und Setzen von Flags
  • Verschiedene Operationen.

Vergleichsprädikate

Der Standard stellt Vergleichsprädikate bereit, um ein Gleitkommadatum mit einem anderen im unterstützten arithmetischen Format zu vergleichen. Jeder Vergleich mit einem NaN wird als ungeordnet behandelt. −0 und +0 sind gleich.

Gesamtordnungsprädikat

Der Standard stellt ein Prädikat totalOrder bereit , das eine Gesamtreihenfolge für kanonische Elemente des unterstützten arithmetischen Formats definiert. Das Prädikat stimmt mit den Vergleichsprädikaten überein, wenn eine Gleitkommazahl kleiner als die andere ist. Das Prädikat totalOrder erzwingt keine Gesamtreihenfolge für alle Codierungen in einem Format. Insbesondere unterscheidet es nicht zwischen verschiedenen Codierungen derselben Gleitkommadarstellung, wie wenn eine oder beide Codierungen nicht kanonisch sind. IEEE 754-2019 enthält Klarstellungen zu totalOrder .

Für die binären Austauschformate , deren Codierung folgt die IEEE 754-2008 Empfehlung zur Platzierung des NaN Signalisierungsbit ist der Vergleich identisch mit einem dass Typ puns die Gleitkommazahlen zu einer Zeichen-Helligkeits - Ganzzahl (eine Nutzlast Ordnung in Übereinstimmung mit dieser Annahme Vergleich), ein alter Trick für den FP-Vergleich ohne FPU.

Ausnahmebehandlung

Der Standard definiert fünf Ausnahmen, von denen jede einen Standardwert zurückgibt und ein entsprechendes Statusflag hat, das beim Auftreten der Ausnahme ausgelöst wird. Es ist keine andere Ausnahmebehandlung erforderlich, es werden jedoch zusätzliche nicht standardmäßige Alternativen empfohlen (siehe § Alternative Ausnahmebehandlung ).

Die fünf möglichen Ausnahmen sind:

  • Ungültige Operation: mathematisch nicht definiert, zB die Quadratwurzel einer negativen Zahl. Gibt standardmäßig qNaN zurück.
  • Division durch Null: Eine Operation mit endlichen Operanden liefert ein exakt unendliches Ergebnis, zB 1/0 oder log(0). Gibt standardmäßig ±unendlich zurück.
  • Überlauf: Ein endliches Ergebnis ist zu groß, um genau dargestellt zu werden ( dh sein Exponent mit einem unbegrenzten Exponentenbereich wäre größer als emax ). Gibt standardmäßig ±unendlich für die Runden-zu-Nächster-Modi zurück (und befolgt die Rundungsregeln für die gerichteten Rundungsmodi).
  • Unterlauf: Ein Ergebnis ist sehr klein (außerhalb des normalen Bereichs). Gibt standardmäßig eine Zahl zurück, die kleiner oder gleich der minimalen positiven normalen Zahl ist (gemäß den Rundungsregeln); eine Subnormale impliziert immer eine Unterlaufausnahme, aber wenn sie genau ist, wird standardmäßig kein Flag gesetzt.
  • Ungenau: Das exakte ( dh ungerundete) Ergebnis ist nicht exakt darstellbar. Gibt standardmäßig das korrekt gerundete Ergebnis zurück.

Dies sind die gleichen fünf Ausnahmen, wie sie in IEEE 754-1985 definiert wurden, aber die Division durch Null- Ausnahme wurde auf andere Operationen als die Division ausgedehnt.

Einige dezimale Gleitkomma-Implementierungen definieren zusätzliche Ausnahmen, die nicht Teil von IEEE 754 sind:

  • Geklammert: Der Exponent eines Ergebnisses ist zu groß für das Zielformat. Standardmäßig werden dem Koeffizienten nachgestellte Nullen hinzugefügt, um den Exponenten auf den größten verwendbaren Wert zu reduzieren. Wenn dies nicht möglich ist (weil dies dazu führen würde, dass die Anzahl der erforderlichen Stellen das Zielformat überschreitet), tritt eine Überlaufausnahme auf.
  • Gerundet: Der Koeffizient eines Ergebnisses erfordert mehr Stellen als das Zielformat bereitstellt. Eine ungenaue Ausnahme wird signalisiert, wenn irgendwelche Nicht-Null-Ziffern verworfen werden.

Darüber hinaus signalisieren Operationen wie Quantisieren, wenn einer der Operanden unendlich ist oder wenn das Ergebnis nicht in das Zielformat passt, auch eine Ausnahme für eine ungültige Operation.

Empfehlungen

Alternative Ausnahmebehandlung

Der Standard empfiehlt die optionale Ausnahmebehandlung in verschiedenen Formen, einschließlich der Vorersetzung benutzerdefinierter Standardwerte und Traps (Ausnahmen, die den Kontrollfluss in irgendeiner Weise ändern) und andere Ausnahmebehandlungsmodelle, die den Fluss unterbrechen, wie Try/Catch. Die Traps und andere Ausnahmemechanismen bleiben wie in IEEE 754-1985 optional.

Empfohlene Operationen

Abschnitt 9 des Standards empfiehlt zusätzliche mathematische Operationen, die Sprachstandards definieren sollten. Keine sind erforderlich, um dem Standard zu entsprechen.

Empfohlene Rechenoperationen, die richtig runden müssen:

Die Funktionen asinPi , acosPi und tanPi waren nicht Bestandteil des IEEE 754-2008 Standards, da sie als weniger notwendig erachtet wurden. asinPi , acosPi wurden erwähnt, aber dies wurde als Fehler gewertet . Alle drei wurden in der Revision 2019 hinzugefügt.

Die empfohlenen Operationen umfassen auch das Einstellen und Zugreifen auf die Rundungsrichtung im dynamischen Modus und implementierungsdefinierte Vektorreduktionsoperationen wie Summe, skaliertes Produkt und Punktprodukt , deren Genauigkeit durch den Standard nicht spezifiziert ist.

Ab 2019 werden auch erweiterte Rechenoperationen für die Binärformate empfohlen. Diese Operationen, spezifiziert für Addition, Subtraktion und Multiplikation, erzeugen ein Wertepaar bestehend aus einem im Format korrekt gerundeten Ergebnis und dem im Format exakt darstellbaren Fehlerterm. Zum Zeitpunkt der Veröffentlichung des Standards sind noch keine Hardware-Implementierungen bekannt, jedoch wurden sehr ähnliche Operationen bereits in Software unter Verwendung bekannter Algorithmen implementiert. Geschichte und Motivation ihrer Standardisierung werden in einem Hintergrunddokument erläutert.

Ab 2019 werden die früher erforderlichen minNum, maxNum, minNumMag und maxNumMag in IEEE 754-2008 aufgrund ihrer Nicht-Assoziativität gelöscht. Stattdessen werden zwei Sätze neuer minimaler und maximaler Operationen empfohlen. Der erste Satz enthält minimum, minimumNumber, maximum und maximumNumber . Der zweite Satz enthält minimumMagnitude, minimumMagnitudeNumber, maximumMagnitude und maximumMagnitudeNumber . Die Historie und Motivation dieser Änderung werden in einem Hintergrunddokument erläutert.

Ausdrucksbewertung

Der Standard empfiehlt, wie Sprachstandards die Semantik von Operationsfolgen spezifizieren sollten, und weist auf die Feinheiten wörtlicher Bedeutungen und Optimierungen hin, die den Wert eines Ergebnisses verändern. Im Gegensatz dazu ließ die vorherige Version des Standards von 1985 Aspekte der Sprachschnittstelle unspezifiziert, was zu inkonsistentem Verhalten zwischen Compilern oder unterschiedlichen Optimierungsstufen in einem optimierenden Compiler führte .

Programmiersprachen sollten es einem Benutzer ermöglichen, eine Mindestgenauigkeit für Zwischenberechnungen von Ausdrücken für jede Basis anzugeben. Dies wird im Standard als PreferredWidth bezeichnet und sollte blockweise einstellbar sein. Zwischenberechnungen innerhalb von Ausdrücken sollten berechnet und temporäre gespeichert werden, wobei die maximale Breite der Operanden und die bevorzugte Breite, falls festgelegt, verwendet werden. So sollte beispielsweise ein Compiler, der auf x87- Gleitkomma-Hardware abzielt, die Möglichkeit haben, anzugeben, dass Zwischenberechnungen das doppelt erweiterte Format verwenden müssen . Bei der Auswertung nachfolgender Ausdrücke muss immer der gespeicherte Wert einer Variablen verwendet werden, und nicht irgendein Vorläufer vor dem Runden und Zuweisen an die Variable.

Reproduzierbarkeit

Die IEEE 754-1985-Version des Standards erlaubte viele Variationen bei der Implementierung (wie die Kodierung einiger Werte und die Erkennung bestimmter Ausnahmen). IEEE 754-2008 hat diese Toleranzen reduziert, aber es bleiben noch einige Variationen (insbesondere für Binärformate). Die Reproduzierbarkeitsklausel empfiehlt, dass Sprachstandards ein Mittel zum Schreiben reproduzierbarer Programme (dh Programme, die in allen Implementierungen einer Sprache das gleiche Ergebnis liefern) bieten und beschreibt, was getan werden muss, um reproduzierbare Ergebnisse zu erzielen.

Charakterdarstellung

Der Standard erfordert Operationen zum Konvertieren zwischen Basisformaten und externen Zeichenfolgenformaten . Konvertierungen in und aus einem Dezimalzeichenformat sind für alle Formate erforderlich. Die Konvertierung in eine externe Zeichenfolge muss so erfolgen, dass die Rückkonvertierung mit Runden in die nächste, Bindungen zu geraden die ursprüngliche Zahl wiederherstellt. Es besteht kein Erfordernis, die Nutzdaten eines stillen NaN oder signalisierenden NaN zu bewahren, und die Umwandlung von der externen Zeichenfolge kann ein signalisierendes NaN in ein stilles NaN verwandeln.

Der ursprüngliche Binärwert wird beibehalten, indem Sie ihn in Dezimalzahlen und wieder zurück konvertieren, indem Sie Folgendes verwenden:

  • 5 Dezimalstellen für Binär16,
  • 9 Dezimalstellen für Binär32,
  • 17 Dezimalstellen für binär64,
  • 36 Dezimalstellen für binär128.

Für andere Binärformate beträgt die erforderliche Anzahl von Dezimalstellen

wobei p die Anzahl der signifikanten Bits im Binärformat ist, zB 237 Bits für binär256.

Bei Verwendung eines dezimalen Gleitkommaformats wird die dezimale Darstellung beibehalten mit:

  • 7 Dezimalstellen für Dezimal32,
  • 16 Dezimalstellen für Dezimal64,
  • 34 Dezimalstellen für dezimal128.

Algorithmen mit Code zur korrekt gerundeten Umwandlung von Binär in Dezimal und Dezimal in Binär werden von Gay und zum Testen von Paxson und Kahan diskutiert.

Siehe auch

Anmerkungen

Verweise

Normen

Sekundärreferenzen

Weiterlesen

Externe Links