IEEE 754
Das IEEE-Standard für die Gleitkomma-Arithmetik (IEEE 754) ist ein Technischer Standard zum schwimmende Punktarithmetik 1985 gegründet von der Institut für Elektro- und Elektronikingenieure (IEEE). Der Standard behandelte viele Probleme gefunden in den vielfältigen Schwimmpunkt-Implementierungen, die es schwierig machten, zuverlässig zu verwenden und portierlich. Viele Hardware schwimmende Punkteinheiten Verwenden Sie den IEEE 754 Standard.
Der Standard definiert:
- arithmetische Formate: Gruppen von binär und Dezimal Schwimmpunktdaten, die aus endlichen Zahlen bestehen (einschließlich Unterzeichnete Nullen und Subnormale Zahlen), Unendlichkeitund spezielle "nicht eine Zahl" Werte (Nans)
- Austauschformate: Codings (Bit-Zeichenfolgen), die zum Austausch von Gleitkomma-Daten in effizienter und kompakter Form verwendet werden können
- Rundungsregeln: Immobilien, die bei Arithmetik und Konvertierungen zufrieden sind, um Zahlen zu erfüllen
- Operationen: arithmetische und andere Operationen (wie z. trigonometrische Funktionen) auf arithmetischen Formaten
- Ausnahmebehandlung: Anzeichen für außergewöhnliche Bedingungen (wie z. Durch Null teilen, Überlauf, usw.)
IEEE 754-2008, veröffentlicht im August 2008, umfasst fast das gesamte Original IEEE 754-1985 Standard plus die IEEE 854-1987 Standard für radixunabhängige Gleitkomma-Arithmetik. Die aktuelle Version IEEE 754-2019 wurde im Juli 2019 veröffentlicht.[1] Es handelt sich um eine geringfügige Überarbeitung der vorherigen Version, die hauptsächlich Klarstellungen, Fehlerkorrekturen und neue empfohlene Operationen enthält.
Standardentwicklung
Der erste Standard für die Gleitkomma-Arithmetik, IEEE 754-1985, wurde 1985 veröffentlicht. Es deckte nur eine binäre Schwimmpunktarithmetik ab.
Eine neue Version, IEEE 754-2008, wurde im August 2008 nach einem siebenjährigen Überarbeitungsprozess unter dem Vorsitz von Dan Zuras veröffentlicht und von herausgegeben von Mike Cowlishaw. Es ersetzte beide IEEE 754-1985 (binäre schwimmende Punktarithmetik) und IEEE 854-1987 Standard für radixunabhängige Gleitkomma-Arithmetik. Die Binärformate im ursprünglichen Standard sind in diesem neuen Standard zusammen mit drei neuen Basisformaten enthalten, eine binäre und zwei Dezimalzahlungen. Um sich dem aktuellen Standard anzupassen, muss eine Implementierung mindestens eines der Grundformate sowohl als arithmetisches Format als auch als Austauschformat implementieren.
Der internationale Standard ISO/IEC/IEEE 60559: 2011 (Mit identischen Inhalten mit IEEE 754-2008) wurde zur Adoption durch die Adoption genehmigt ISO/IEC JTC1/SC 25 im Rahmen der ISO/IEEE -PSDO -Vereinbarung[2][3] und veröffentlicht.[4]
Die aktuelle Version, IEEE 754-2019, veröffentlicht im Juli 2019, stammt aus und ersetzt IEEE 754-2008 nach einem im September 2015 begonnenen Überarbeitungsprozess unter dem Vorsitz von David G. Hough und bearbeitet von Mike Cowlishaw. Es enthält hauptsächlich Klarstellungen (z. Gesamtbestellung) und Defektfixes (z. Minnum), aber auch einige neue empfohlene Operationen (z. Augmentedaddition).[5][6]
Der internationale Standard ISO/IEC 60559: 2020 (Mit identischen Inhalten mit IEEE 754-2019 wurde für die Adoption über ISO/IEC zugelassen JTC1/SC 25 und veröffentlicht.[7]
Die nächste projizierte Überarbeitung des Standards ist 2028.[8]
Formate
Ein IEEE 754 Format ist eine "Reihe von Darstellungen numerischer Werte und Symbole". Ein Format kann auch enthalten, wie der Satz codiert wird.[9]
Ein Floating-Punkt-Format wird durch angegeben
- eine Basis (auch genannt Radix) b, was entweder 2 (binär) oder 10 (Dezimal) in IEEE 754 ist;
- eine Präzision p;
- ein Exponentbereich von Emin zu EMAX, mit Emin = 1 - EMAX für alle IEEE 754 -Formate.
Ein Format umfasst
- Endliche Zahlen, die von drei Ganzzahlen beschrieben werden können: s= a Schild (Null oder eins), c= a Bedeutung (oder Koeffizient) Nicht mehr als p Ziffern in der Basis geschrieben b (d. H. Eine Ganzzahl im Bereich bis 0 bis bp- 1) und q= an Exponent so dass Emin ≤ q+p- 1 ≤ EMAX. Der numerische Wert einer solchen endlichen Zahl ist (–1)s × c × bq.[a] Darüber hinaus gibt es zwei Nullwerte, genannt Unterzeichnete Nullen: Das Vorzeichenbit gibt an, ob eine Null +0 (positiver Null) oder -0 (negativer Null) beträgt.
- Zwei Unendlichkeiten: +∞ und −∞.
- Zwei Arten von Nan (Not-a-Number): ein ruhiger Nan (Qnan) und ein Signal-Nan (Snan).
Zum Beispiel wenn b = 10, p = 7 und und EMAX = 96, dann Emin = –95, das Signaland erfüllt 0 ≤ c ≤ 9999999und der Exponent erfüllt –101 ≤ q ≤ 90. Folglich beträgt die kleinste positive Zahl ungleich Null, die dargestellt werden kann, 1 × 10–101und der größte ist 9999999 × 1090 (9.999999 × 1096), so dass der gesamte Zahlenbereich –9,999999 × 10 beträgt96 bis 9.999999 × 1096. Die Zahlen -b1–EMAX und b1–EMAX (Hier, –1 × 10–95 und 1 × 10–95) sind die kleinsten (in Größe) Normalzahlen; ungleich Null Zahlen zwischen diesen kleinsten Zahlen werden genannt Subnormale Zahlen.
Darstellung und Codierung im Gedächtnis
Einige Zahlen können mehrere mögliche Exponentialformatdarstellungen haben. Zum Beispiel wenn, wenn b= 10 und und p= 7, dann kann –12,345 durch –12345 × 10 dargestellt werden–3, –123450 × 10–4und –1234500 × 10–5. Bei den meisten Operationen wie 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 der Satz dieser Darstellungen wird als a genannt Kohorte. Wenn ein Ergebnis mehrere Darstellungen haben kann, gibt der Standard an, welches Mitglied der Kohorte ausgewählt wird.
Für die binären Formate wird die Darstellung einzigartig gemacht, indem der kleinste darstellbare Exponent ausgewählt wird, sodass der Wert genau dargestellt werden kann. Ferner ist der Exponent nicht direkt dargestellt, sondern a Voreingenommenheit wird hinzugefügt, so dass der kleinste darstellbare Exponent als 1 dargestellt wird, wobei 0 für subnormale Zahlen verwendet wird. Für Zahlen mit einem Exponenten im normalen Bereich (das Exponentfeld ist weder alle noch alle Nullen), wird das führende Bit des Signal und das Leitfaden immer 1 sein. Folglich kann ein führender 1 eher impliziert als explizit in der Gedächtniscodierung vorhanden. und unter dem Standard wird der explizit dargestellte Teil des Signifikants zwischen 0 und 1 liegen. Diese Regel wird aufgerufen Führungsteilung, implizite Bitkonvention, oder Versteckte Bitkonvention. Diese Regel ermöglicht es dem binären Format, ein zusätzliches Stück Präzision zu haben. Die führende Bitkonvention kann nicht für die subnormalen Zahlen verwendet werden, da sie einen Exponenten außerhalb des normalen Exponentenbereichs und des kleinsten darstellenden Exponenten, wie für die kleinsten Normalzahlen verwendet, aufweisen.
Aufgrund der Möglichkeit mehrerer Codierungen (zumindest in Formaten genannt Austauschformate), eine Nan kann andere Informationen tragen: ein Zeichenbit (was keine Bedeutung hat, aber von einigen Operationen verwendet werden kann) und a Nutzlast, was für diagnostische Informationen vorgesehen ist, die die Quelle der NAN angeben (aber die Nutzlast kann andere Verwendungszwecke haben, wie z. Nanboxing[10][11][12]).
Grund- und Austauschformate
Der Standard definiert fünf grundlegende Formate, die nach ihrer numerischen Basis und der Anzahl der Bits benannt sind, die in ihrer Austauschcodierung verwendet werden. Es gibt drei grundlegende Basisformate von Binärerschwimmpunkten (codiert mit 32, 64 oder 128 Bit) und zwei Dezimal-Floating-Punkt-Basisformaten (codiert mit 64 oder 128 Bit). Das Binary32 und Binary64 Formate sind die Single und doppelt Formate von IEEE 754-1985 beziehungsweise. Eine konforme Implementierung muss mindestens eines der Grundformate vollständig implementieren.
Der Standard definiert auch Austauschformate, die diese Grundformate verallgemeinern.[13] Für die Binärformate ist die führende Bitkonvention erforderlich. Die folgende Tabelle fasst die kleinsten Austauschformate (einschließlich der grundlegenden) zusammen.
Name | Gemeinsamen Namen | Base | Wichtig und Bits[b] oder Ziffern | Dezimalziffern | Exponentbits | Dezimaler E max | Exponent -Voreingenommenheit[14] | E min | E Max | Anmerkungen |
---|---|---|---|---|---|---|---|---|---|---|
Binary16 | Halbe Präzision | 2 | 11 | 3.31 | 5 | 4.51 | 24–1 = 15 | –14 | +15 | nicht einfach |
Binary32 | Mit einfacher Genauigkeit | 2 | 24 | 7.22 | 8 | 38.23 | 27–1 = 127 | –126 | +127 | |
Binary64 | Doppelte Genauigkeit | 2 | 53 | 15.95 | 11 | 307.95 | 210–1 = 1023 | –1022 | +1023 | |
Binary128 | Vierfache Präzision | 2 | 113 | 34.02 | 15 | 4931.77 | 214–1 = 16383 | –16382 | +16383 | |
Binary256 | Oktuple Präzision | 2 | 237 | 71.34 | 19 | 78913.2 | 218–1 = 262143 | –262142 | +262143 | nicht einfach |
Decimal32 | 10 | 7 | 7 | 7.58 | 96 | 101 | –95 | +96 | nicht einfach | |
Decimal64 | 10 | 16 | 16 | 9.58 | 384 | 398 | –383 | +384 | ||
Decimal128 | 10 | 34 | 34 | 13.58 | 6144 | 6176 | –6143 | +6144 |
Beachten Sie, dass in der obigen Tabelle die aufgelisteten Mindestexponenten für Normalzahlen betragen. das Sonderangebot Subnormale Zahl Die Darstellung ermöglicht es, noch kleinere Zahlen darzustellen (mit einigem Präzisionsverlust). Zum Beispiel ist die kleinste positive Zahl, die in Binary64 dargestellt werden kann .64–1074; Beiträge zur –1074 -Abbildung umfassen den E min -Wert –1022 und alle bis auf eine der 53 Signaland Bits (2–1022 - (53 - 1)= 2–1074).
Dezimalstellen sind Ziffern × log10 Base. Dies ergibt eine ungefähre Präzision der Anzahl der Dezimalstellen.
Decimal E Max ist EMAX × log10 Base. Dies ergibt einen ungefähren Wert des maximalen Dezimalponenten.
Die Binary32 (Single) und Binary64 (Double) -Formate sind zwei der heute häufig verwendeten Formate. Die folgende Abbildung zeigt die absolute Genauigkeit für beide Formate über einen Wertebereich. Diese Abbildung kann verwendet werden, um ein geeignetes Format mit dem erwarteten Wert einer Zahl und der erforderlichen Genauigkeit auszuwählen.
Ein Beispiel für ein Layout für 32-Bit-Schwimmpunkt ist
und die 64 -Bit -Layout ist ähnlich.
Erweiterte und erweiterbare Präzisionsformate
Der Standard gibt optional an erweitert und erweiterbare Präzisionsformate, die eine größere Präzision liefern als die Grundformate.[15] Ein erweitertes Präzisionsformat erweitert ein grundlegendes Format, indem mehr Präzision und mehr Exponentenbereich verwendet werden. Mit einem erweiterbaren Präzisionsformat kann der Benutzer den Präzisions- und Exponentenbereich angeben. Eine Implementierung kann die interne Darstellung verwenden, die sie für solche Formate auswählt. Alles, was definiert werden muss, sind seine Parameter (b, p, und EMAX). Diese Parameter beschreiben einzigartig die Menge der endlichen Zahlen (Kombinationen von Vorzeichen, Bedeutung und Exponent für den angegebenen Radix), den sie darstellen kann.
Der Standard empfiehlt, dass Sprachstandards eine Spezifikationsmethode liefern p und EMAX Für jede unterstützte Basis b.[16] Der Standard empfiehlt, dass Sprachstandards und Implementierungen ein erweitertes Format unterstützen, das eine größere Genauigkeit hat als das größte grundlegende Format, das für jeden Radix unterstützt wird b.[17] Für ein erweitertes Format mit einer Genauigkeit zwischen zwei grundlegenden Formaten muss der Exponentenbereich so groß sein wie das des nächsten breiteren Grundformats. Zum Beispiel muss eine 64-Bit-erweiterte Präzisions-Binärzahl eine 'EMAX' von mindestens 16383 haben. Die x87 80-Bit erweitertes Format erfüllt diese Anforderung.
Austauschformate
Die Austauschformate sind für den Austausch von Floating-Punkt-Daten unter Verwendung einer Bit-String von fester Länge für ein bestimmtes Format bestimmt.
Binär
Für den Austausch von Binär-Gleitkomma-Zahlen, Austauschformaten der Länge von 16 Bits, 32 Bit, 64 Bit und jedem Vielfachen von 32 Bits ≥ 128[c] sind festgelegt. Das 16-Bit-Format ist für den Austausch oder die Speicherung kleiner Zahlen (z. B. für Grafiken) vorgesehen.
Das Codierungsschema für diese binären Austauschformate ist das gleiche wie das von IEEE 754-1985: ein Zeichenbit, gefolgt von w Exponent -Bits, die den Exponentenversatz durch a beschreiben Voreingenommenheit, und p- 1 Bits, die den Signifikum beschreiben. Die Breite des Exponentfelds für a k-Bitformat wird berechnet als w= Rund (4 log2(k))- 13. Die vorhandenen 64- und 128-Bit-Formate folgen dieser Regel, aber die 16- und 32-Bit-Formate haben mehr Exponentenbits (5 bzw. 8) als diese Formel (3 bzw. 7).
Wie bei IEEE 754-1985 wird das Feld des Verzerrungsexponents mit allen 1 Bit gefüllt, um entweder unendlich (nachlaufendes signifikantes Feld = 0) oder ein NAN (nachlaufender Signaland-Feld ≠ 0) anzuzeigen. Für NANS werden ruhige NANs und Signal -NANs unterschieden, indem das signifikanteste Bit des nachfolgenden Signaland -Feldes ausschließlich verwendet wird.[d] und die Nutzlast wird in den verbleibenden Teilen getragen.
Dezimal
Für den Austausch von Dezimal-Gleitkomma-Zahlen werden die Austauschformate eines Vielfachens von 32 Bit definiert. Wie beim binären Austausch codiert das Codierungsschema für die Dezimalwechselformate das Zeichen, das Exponent und das Dennzeichen. Zwei verschiedene Bit-Level-Kodierungen werden definiert, und der Austausch wird durch die Tatsache kompliziert, dass ein externer Indikator für die verwendete Codierung erforderlich sein kann.
Die beiden Optionen ermöglichen es, dass der Signaland als komprimierte Sequenz von Dezimalstellen verwendet wird dicht gepackte Dezimalzahl oder alternativ als binäre Ganzzahl. Ersteres ist bequemer für die direkte Hardware -Implementierung des Standards, während letzteres eher für die Softwareemulation auf einem binären Computer geeignet ist. In beiden Fällen ist der Satz von Zahlen (Kombinationen von Zeichen, Bedeutung und Exponent) identisch und ist identisch und besondere Werte (± Null mit dem minimalen Exponenten, ± unendlich, ruhige NANS und Signal -NANS) haben identische Kodierungen.
Rundungsregeln
Der Standard definiert fünf Rundungsregeln. Die ersten beiden Regeln runden zu einem nächsten Wert; Die anderen werden genannt Rundungen gerichtet:
Runden bis nächsten
- Rund bis am nächsten, Krawatten zu sogar- Runden zum nächsten Wert; Wenn die Zahl auf halbem Weg fällt, wird sie mit einer noch am wenigsten signifikanten Ziffer auf den nächsten Wert gerundet.
- Rund bis am nächsten, Krawatten von Null entfernt (oder Krawatten zu Auswärts) - Runden zum nächsten Wert; Wenn die Zahl auf halbem Weg fällt, wird sie auf den oben genannten Wert (für positive Zahlen) oder unter (für negative Zahlen) abgerundet.
Am Extreme ein Wert mit einer Größe streng weniger als wird auf die minimale oder maximale endliche Zahl abgerundet (abhängig vom Wert des Werts). Alle Zahlen mit genau dieser Größenordnung werden als Krawatten angesehen. Diese Wahl der Krawatte kann als Mittelpunkt zwischen konzipiert werden und , was der Exponent nicht begrenzt wäre, wäre die nächste darstellbare Schwimmpunktzahlen größer in der Größe. Zahlen mit einer Größe streng größer als werden an die entsprechende Unendlichkeit abgerundet.[18]
Rund bis in nächstgelegt ist Krawatten zu einem Ausfall für binäre schwimmende Punkte und der empfohlene Ausfall für die Dezimalzahl. Rund bis zur nächsten, Krawatten zu Ausfahrt sind nur für Dezimalimpulden erforderlich.[19]
Rundungen gerichtet
- Runde in Richtung 0- Rundung auf Null gerichtet (auch bekannt als bekannt als Kürzung).
- Rund in Richtung +∞- Rundung in Richtung positiver Unendlichkeit (auch bekannt als bekannt als Aufrunden oder Decke).
- Rund in Richtung −∞- Rundung in Richtung negativer Unendlichkeit (auch bekannt als bekannt als Rundung nach unten oder Boden).
Modus | Beispielwert | |||
---|---|---|---|---|
+11.5 | +12.5 | –11,5 | –12,5 | |
bis am nächsten, Krawatten zu sogar | +12.0 | +12.0 | –12.0 | –12.0 |
bis am nächsten, Krawatten von Null entfernt | +12.0 | +13.0 | –12.0 | –13.0 |
in Richtung 0 | +11.0 | +12.0 | –11.0 | –12.0 |
in Richtung +∞ | +12.0 | +13.0 | –11.0 | –12.0 |
zu -−∞ | +11.0 | +12.0 | –12.0 | –13.0 |
Sofern nicht anders angegeben, wird das Gleitkommaergebnis einer Operation durch Anwenden der Rundungsfunktion auf das unendlich präzise (mathematische) Ergebnis bestimmt. Eine solche Operation soll sein richtig abgerundet. Diese Anforderung heißt Rundung korrekt.[20]
Erforderliche Operationen
Erforderliche Operationen für ein unterstütztes arithmetisches Format (einschließlich der Grundformate) umfassen:
- Konvertierungen zu und von Ganzzahl[21][22]
- Vorherige und nächste aufeinanderfolgende Werte[23]
- Arithmetische Operationen (hinzufügen, subtrahieren, multiplizieren, teilen, quadratische Wurzel, Fusions -Multiply -Add, Rest, minimal, maximal)[24][25]
- Conversions (zwischen Formaten, zu und von Strings,, usw.)[26][27]
- Skalierung und (für Dezimal) quantisieren[28][29]
- Kopieren und Manipulieren des Zeichens (ABS, negieren, usw.)[30]
- Vergleiche und Gesamtbestellung[31][32]
- Klassifizierung von Zahlen (subnormal, endlich, usw.) und Tests für Nans[33]
- Testen und Festlegen von Statusflags[34]
Vergleichsprädikate
Der Standard bietet Vergleichsprädikate zum Vergleich eines Floating-Punkt-Datums mit einem anderen im unterstützten arithmetischen Format.[35] Jeder Vergleich mit einer NAN wird als ungeordnet behandelt. –0 und +0 vergleichen als gleich.
Prädikat insgesamt
Der Standard liefert ein Prädikat Gesamtbestellung, was a definiert a Gesamtbestellung auf kanonischen Mitgliedern des unterstützten arithmetischen Formats.[36] Das Prädikat stimmt mit den Vergleichsprädikaten überein, wenn eine Schwimmpunktzahl geringer ist als die andere. Das Gesamtbestellung Das Prädikat verhängt nicht allen Codierungen in einem Format eine Gesamtreihenfolge. Insbesondere unterscheidet es nicht zwischen verschiedenen Codierungen derselben schwimmenden Punktdarstellung, wie wenn eine oder beide Codierungen nicht-kanonisch sind.[37] IEEE 754-2019 enthält Klarstellungen von Gesamtbestellung.
Für die binären Austauschformate, deren Codierung der IEEE 754-2008-Empfehlung auf folgt Platzierung des NAN -SignalbitsDer Vergleich ist identisch mit einem, das Tippen Sie Wortspiele Die Floating-Punkt-Zahlen zu einer Vorzeichen-Magnitude-Ganzzahl (unter der Annahme einer Nutzlast, die mit diesem Vergleich übereinstimmt), ein alter Trick für den FP-Vergleich ohne FPU.[38]
Ausnahmebehandlung
Der Standard definiert fünf Ausnahmen, von denen jeder einen Standardwert zurückgibt und ein entsprechendes Statusflag aufweist, das bei der Ausnahme erhöht wird.[e] Es ist keine weitere Ausnahmebehandlung erforderlich, aber zusätzliche Nicht-Default-Alternativen werden empfohlen (siehe § Alternative Ausnahmebehandlung).
Die fünf möglichen Ausnahmen sind
- Ungültige Operation: mathematisch undefiniert, z.B.die Quadratwurzel einer negativen Zahl. Standardmäßig gibt qnan zurück.
- Division von Null: Ein Betrieb bei endlichen Operanden ergibt ein exakt unendliches Ergebnis. z.B., 1/0 oder Protokoll (0). Standardmäßig kehrt ± unendlich zurück.
- Überlauf: Ein begrenztes Ergebnis ist zu groß, um genau darzustellen (genau darzustellen (d.h., sein Exponent mit einem unbegrenzten Exponentenbereich wäre größer als EMAX). Standardmäßig gibt die Rendite ± Unendlichkeit für die rund-zu-zu-Near-Modi zurück (und folgt den Rundungsregeln für die gerichteten Rundungsmodi).
- Unterfluss: Ein Ergebnis ist sehr klein (außerhalb des normalen Bereichs). Standardmäßig gibt eine Zahl weniger als oder gleich der minimalen positiven Normalzahl in der Größe zurück (nach den Rundungsregeln); a subnormal Impliziert immer eine Unterlaufausnahme, aber standardmäßig wird keine Flagge erhöht.
- Ungenau: das genaue (d.h., ungrundigt) Ergebnis ist nicht genau dargestellt. Standardmäßig gibt das korrekt abgerundete Ergebnis zurück.
Dies sind die gleichen fünf Ausnahmen wie in IEEE 754-1985, aber die Durch Null teilen Die Ausnahme wurde auf andere Operationen als die Abteilung ausgedehnt.
Einige Dezimal-Schwimmpunkt-Implementierungen definieren zusätzliche Ausnahmen,[39][40] die nicht Teil von IEEE 754 sind:
- Klemmisch: Das Exponent eines Ergebnisses ist für das Zielformat zu groß. Standardmäßig wird nach dem Koeffizienten nachverfolgende Nullen hinzugefügt, um den Exponenten auf den größten nutzbaren Wert zu reduzieren. Wenn dies nicht möglich ist (da dies die Anzahl der Ziffern verursachen würde, die mehr als das Zielformat sein müssen), tritt eine Überlaufausnahme auf.
- Abgerundet: Der Koeffizient eines Ergebniss erfordert mehr Ziffern als das Zielformat bietet. Eine ungenaue Ausnahme wird signalisiert, wenn keine Null-Ziffern verworfen werden.
Darüber hinaus setzt Operationen wie Quantize, wenn einer Operand unendlich ist oder wenn das Ergebnis nicht zum Zielformat passt, auch eine ungültige Betriebsausnahme.[41]
Empfehlungen
Alternative Ausnahmebehandlung
Der Standard empfiehlt die optionale Ausnahmebehandlung in verschiedenen Formularen, einschließlich der Vorschriften der benutzerdefinierten Standardwerte und der Fallen (Ausnahmen, die den Kontrollfluss in irgendeiner Weise ändern) und andere Ausnahmebehandlungsmodelle, die den Fluss unterbrechen, wie z. B. Try/Catch. Die Fallen und andere Ausnahmemechanismen bleiben optional, da sie in IEEE 754-1985 waren.
Empfohlene Operationen
Klausel 9 im Standard empfiehlt zusätzliche mathematische Operationen[42] Diese Sprachstandards sollten definieren.[43] Es sind keine erforderlich, um sich dem Standard anzupassen.
Im Folgenden werden arithmetische Operationen empfohlen, die korrekt runden müssen:[44]
- , ,
- , ,
- , ,
- , ,
- ,
- , ,
- , , ,
- , , (siehe auch: Vielfache von π)
- , , , (siehe auch: Vielfache von π)
- , ,
- , ,
Das Asinpi, Acospi und Tanpi Funktionen waren nicht Teil des IEEE 754-2008-Standards, da sie als weniger als notwendig eingestuft wurden.[45] Asinpi, Acospi wurden erwähnt, aber dies wurde als Fehler angesehen.[5] Alle drei wurden in der Revision 2019 hinzugefügt.
Die empfohlenen Vorgänge umfassen auch das Einstellen und Zugriff auf die Rundungsrichtung des dynamischen Modus.[46] und implementierungsdefinierte Vektor-Reduktionsvorgänge wie Summe, skaliertes Produkt und Skalarprodukt, deren Genauigkeit vom Standard nicht spezifiziert wird.[47]
Ab 2019[aktualisieren], erweiterte arithmetische Operationen[48] Für die binären Formate werden ebenfalls empfohlen. Diese für Addition, Subtraktion und Multiplikation angegebenen Operationen erzeugen ein Wertepaar, die aus einem Ergebnis bestehen, das im Format und im Fehlerbegriff korrekt abgerundet ist, was genau im Format dargestellt ist. Zum Zeitpunkt der Veröffentlichung des Standards sind keine Hardware-Implementierungen bekannt, aber es wurden bereits sehr ähnliche Vorgänge in Software mit bekannten Algorithmen implementiert. Die Geschichte und Motivation für ihre Standardisierung werden in einem Hintergrunddokument erklärt.[49][50]
Ab 2019 benötigten die früher Minnum, Maxnum, Minnummag und Maxnummag In IEEE werden 754-2008 jetzt aufgrund ihrer Nicht-Assoziativität gelöscht. Stattdessen zwei neue Sätze neuer Sätze minimale und maximale Operationen werden empfohlen.[51] Der erste Satz enthält Minimum, Minimum, Maximum und Maximumnumber. Der zweite Satz enthält Minimumagnitude, MinimumMagnitUdeNumber, MaximumMagnitude und MaximumMagnitUdeNumber. Die Geschichte und Motivation für diesen Wandel werden in einem Hintergrunddokument erklärt.[52]
Ausdrucksbewertung
Der Standard empfiehlt, wie Sprachstandards die Semantik von Operationssequenzen angeben und auf die Feinheiten von wörtlichen Bedeutungen und Optimierungen hinweist, die den Wert eines Ergebniss ändern. Dagegen der vorherige 1985 Version der standardmäßigen linken Aspekte der Sprachschnittstelle nicht spezifiziert, was zu inkonsistentem Verhalten zwischen Compilern oder unterschiedlichen Optimierungsstufen in einem führte Compiler optimieren.
Programmiersprachen sollten es einem Benutzer ermöglichen, eine minimale Genauigkeit für Zwischenberechnungen von Ausdrücken für jeden Radix anzugeben. Dies wird als bezeichnet als Vorzugsbreite im Standard, und es sollte möglich sein, dies auf Blockbasis festzulegen. Zwischenberechnungen innerhalb der Ausdrücke sollten berechnet werden und temporäre Zeiträume unter Verwendung des Maximums der Breite der Operanden und der bevorzugten Breite, falls festgelegt. So zum Beispiel ein Compiler -Targeting x87 Gleitkomma-Hardware sollte ein Mittel haben, um anzugeben, dass Zwischenberechnungen die verwenden müssen Doppelte Format. Der gespeicherte Wert einer Variablen muss immer bei der Bewertung nachfolgender Ausdrücke verwendet werden, anstatt dass ein Vorläufer vor dem Runden und Zuweisen der Variablen vorliegt.
Reproduzierbarkeit
Die IEEE 754-1985-Version des Standards ermöglichte viele Variationen in den Implementierungen (z. B. die Codierung einiger Werte und die Erkennung bestimmter Ausnahmen). IEEE 754-2008 hat diese Zulagen reduziert, aber noch einige Variationen bestehen (insbesondere für binäre Formate). Die Reproduzierbarkeitsklausel empfiehlt, dass Sprachstandards ein Mittel zum Schreiben reproduzierbarer Programme (d. H. Programme, die das gleiche Ergebnis in allen Implementierungen einer Sprache hervorrufen) und beschreibt, was getan werden muss, um reproduzierbare Ergebnisse zu erzielen.
Charakterdarstellung
Der Standard erfordert, dass Vorgänge zwischen den grundlegenden Formaten umwandeln und externe Zeichensequenz Formate.[53] Für alle Formate sind Konvertierungen in und aus einem Dezimalfigurformat erforderlich. Die Konvertierung in eine externe Zeichensequenz muss so sein, dass die Konvertierung mit Runde zu nächster Runde die ursprüngliche Zahl wiederherstellt. Es ist nicht erforderlich, die Nutzlast einer ruhigen Nan oder einer Signal -Nan zu erhalten, und die Umwandlung aus der externen Zeichensequenz kann eine Signal -Nan in eine ruhige Nan verwandeln.
Der ursprüngliche Binärwert wird durch Konvertieren in Dezimalheit und wieder wieder mit:[54]
- 5 Dezimalstellen für Binary16,
- 9 Dezimalstellen für Binary32,
- 17 Dezimalstellen für Binary64,
- 36 Dezimalstellen für Binary128.
Für andere binäre Formate ist die erforderliche Anzahl der Dezimalstellen[f]
wo p ist die Anzahl der signifikanten Bits im Binärformat, z. 237 Bit für Binary256.
Bei der Verwendung eines Dezimal-Gleitkomma-Formats wird die Dezimalvertretung unter Verwendung erhalten:
- 7 Dezimalstellen für Decimal32,
- 16 Dezimalstellen für Decimal64,
- 34 Dezimalstellen für Decimal128.
Algorithmen mit Code für korrekt abgerundete Konvertierung von Binär zu Dezimal- und Dezimalzahlung nach Binär werden von Gay diskutiert.[55] und zum Testen - von Paxson und Kahan.[56]
Hexadezimalliterale
Der Standard empfiehlt die Bereitstellung von Conversions von und von externe hexadezimal-signifikante Zeichensequenzen, bezogen auf C99's hexadezimale schwimmende Punktliterale. Ein solches wörtliches besteht aus einem optionalen Zeichen (+
oder -
), der Indikator "0x", eine Hexadezimalzahl mit oder ohne Periode, ein Exponent -Indikator "P" und ein Dezimalponent mit optionalem Vorzeichen. Die Syntax ist nicht sensibel.[57] Die Dezimalerponentskalen nach 2 -köpfiger Kräfte von 2, also zum Beispiel 0x0.1p-4
ist 1/256.[58]
Siehe auch
- Bfloat16 Floating-Punkt-Format
- Binde
- Coprozessor
- C99 Für Codebeispiele, die Zugriff und Verwendung von IEEE 754 -Funktionen demonstrieren.
- Schwimmende Punktarithmetik, für Geschichte, Design -Begründung und Beispiel Verwendung von IEEE 754 -Funktionen.
- Fixpunktarithmetikfür einen alternativen Ansatz bei der Berechnung mit rationalen Zahlen (besonders vorteilhaft, wenn der Exponentenbereich zum Kompilieren bekannt ist).
- IBM System Z9Die erste CPU zum Implementieren von IEEE 754-2008 Dezimalarithmetik (mit Hardware-Mikrocode).
- IBM Z10, IBM Z196, IBM ZEC12, und IBM Z13, CPUs, die IEEE 754-2008 Dezimalarithmetik in Hardware implementieren.
- ISO/IEC 10967, sprachunabhängige Arithmetik (LIA).
- Minifloat, Binär-Schwimmpunktformate mit niedriger Präzision nach IEEE 754-Prinzipien.
- Power6, Power7, und Power8 CPUs, die IEEE 754-2008 Dezimalarithmetik in Hardware implementieren.
- strictfpein Schlüsselwort in der Java -Programmiersprache Dies schränkt die Arithmetik auf IEEE 754 Single und Double Precision ein, um die Reproduzierbarkeit zwischen gemeinsamen Hardware -Plattformen zu gewährleisten.
- Tischhersteller-Dilemma Weitere Informationen zur korrekten Rundung von Funktionen.
- Standard Apple Numerics -Umgebung
- Verjüngter schwimmender Punkt
Anmerkungen
- ^ Wenn die Basis beispielsweise 10 ist, beträgt das Vorzeichen 1 (was negativ anzeigt), das Signaland 12345 und der Exponent –3, der Wert der Zahl ist (–1)1 × 12345 × 10–3 = –1 × 12345 × 0,001 = –12,345.
- ^ Einbeziehung des impliziten Bits (das immer 1 für Normalzahlen entspricht, und 0 für subnormale Zahlen. Dieses implizite Bit wird nicht im Speicher gespeichert), aber nicht im Vorzeichenbit.
- ^ Im Gegensatz zur Dezimalzahl gibt es kein Binärwechselformat von 96-Bit-Länge. Ein solches Format ist jedoch immer noch als Nicht-Weitendrahtformat zulässig.
- ^ Der Standard empfiehlt 0 für die Signalisierung von NANs, 1 für ruhige NANs, so dass ein Signal -NANS beruhigt werden kann, indem nur dieses Bit auf 1 geändert wird, während das Gegenteil die Kodierung einer Unendlichkeit ergeben kann.
- ^ In bestimmten Fällen des Unterlaufs wird keine Flagge erhoben.
- ^ Als Implementierungsgrenze ist die korrekte Rundung nur für die Anzahl der erforderlichen Dezimalstellen plus 3 für das größte unterstützte Binärformat garantiert. Wenn beispielsweise Binary32 das größte unterstützte Binärformat ist, wird eine Umwandlung aus einer dezimalen externen Sequenz mit 12 Dezimalstellen garantiert korrekt abgerundet, wenn sie in Binary32 umgewandelt wurde. Die Umwandlung einer Sequenz von 13 Dezimalstellen ist jedoch nicht; Der Standard empfiehlt jedoch, dass Implementierungen keine solche Begrenzung auferlegen.
Verweise
- ^ IEEE 754 2019
- ^ "FW: ISO/IEC/IEEE 60559 (IEEE STD 754-2008)". Grouper.ieee.org. Archiviert von das Original Am 2017-10-27. Abgerufen 2018-04-04.
- ^ "ISO/IEEE Partner Standards Development Organization (PSDO) Kooperationsvereinbarung" (PDF). 2007-12-19. Abgerufen 2021-12-27.
- ^ "ISO/IEC/IEEE 60559: 2011-Informationstechnologie-Mikroprozessorsysteme-Floating-Punkt-Arithmetik". www.iso.org. Abgerufen 2018-04-04.
- ^ a b Cowlishaw, Mike (2013-11-13). "IEEE 754-2008 Errata". Speleotrove.com. Abgerufen 2020-01-24.
- ^ "Überarbeiten von ANSI/IEEE STD 754-2008". ucbtest.org. Abgerufen 2018-04-04.
- ^ "ISO/IEC 60559: 2020-Informationstechnologie-Mikroprozessorsysteme-Floating-Punkt-Arithmetik". www.iso.org. Abgerufen 2020-10-25.
- ^ Riedy, E. Jason (2018-06-26), "Pläne für IEEE Standard 754 - 2028" (PDF), 25. IEEE -Symposium auf Computerarithmetik, Amherst, MA: IEEE
{{}}
: CS1 Wartung: Datum und Jahr (Link) - ^ IEEE 754 2008, §2.1.27.
- ^ "Spidermonkey -Interna". Entwickler.mozilla.org. Abgerufen 2018-03-11.
- ^ Klemens, Ben (September 2014). 21. Jahrhundert C: C -Tipps aus der neuen Schule. O'Reilly Media, integriert. p. 160. ISBN 9781491904442. Abgerufen 2018-03-11.
- ^ "Zuiderkwast/Nanbox: Nan-Boxing in C". GitHub. Abgerufen 2018-03-11.
- ^ IEEE 754 2008§3.6.
- ^ Cowlishaw, Mike. "Dezimalarithmetische Kodierungen" (PDF). IBM. Abgerufen 2015-08-06.
- ^ IEEE 754 2008§3.7.
- ^ IEEE 754 2008§3.7 heißt es: "Sprachstandards sollten Mechanismen definieren, die für jeden unterstützten Radix eine erweiterbare Genauigkeit unterstützen."
- ^ IEEE 754 2008§3.7 heißt es: "Sprachstandards oder Implementierungen sollten ein erweitertes Präzisionsformat unterstützen, das das breiteste grundlegende Format erweitert, das in diesem Radix unterstützt wird."
- ^ IEEE 754 2008§4.3.1. "In den folgenden zwei Rundungs-Regisseur-Attributen ein unendlich genaues Ergebnis mit der Größe zumindest soll runden zu ohne Zeichenänderung. "
- ^ IEEE 754 2008§4.3.3
- ^ IEEE 754 2019§2.1
- ^ IEEE 754 2008§5.3.1
- ^ IEEE 754 2008, §5.4.1
- ^ IEEE 754 2008§5.3.1
- ^ IEEE 754 2008§5.3.1
- ^ IEEE 754 2008, §5.4.1
- ^ IEEE 754 2008§5.4.2
- ^ IEEE 754 2008§5.4.3
- ^ IEEE 754 2008§5.3.2
- ^ IEEE 754 2008§5.3.3
- ^ IEEE 754 2008§5.5.1
- ^ IEEE 754 2008, §5.10
- ^ IEEE 754 2008, §5.11
- ^ IEEE 754 2008§5.7.2
- ^ IEEE 754 2008, §5.7.4
- ^ IEEE 754 2019, §5.11
- ^ IEEE 754 2019, §5.10
- ^ IEEE 754 2019, §5.10
- ^ Herf, Michael (Dezember 2001). "Radix Tricks". Stereopsis: Grafik.
- ^ "9.4. Dezimales - Dezimaler Fixpunkt und Gleitkomma -Arithmetik - Python 3.6.5 Dokumentation". docs.python.org. Abgerufen 2018-04-04.
- ^ "Dezimalarithmetik - außergewöhnliche Bedingungen". Speleotrove.com. Abgerufen 2018-04-04.
- ^ IEEE 754 2008§7.2 (h)
- ^ IEEE 754 2019§9.2
- ^ IEEE 754 2008, Klausel 9
- ^ IEEE 754 2019§9.2.
- ^ "Re: Fehlende Funktionen Tanpi, Asinpi und Acospi". Grouper.ieee.org. Archiviert von das Original Am 2017-07-06. Abgerufen 2018-04-04.
- ^ IEEE 754 2008§9.3.
- ^ IEEE 754 2008§9.4.
- ^ IEEE 754 2019§9.5
- ^ Riedy, Jason; Demmel, James. "Augmented Arithmetic Operations für IEEE-754 2018 vorgeschlagen" (PDF). 25. IEEE -Symbosium über Computerarithmetik (Arith 2018). S. 49–56. Archiviert (PDF) vom Original am 2019-07-23. Abgerufen 2019-07-23.
- ^ "754 Revision für 2019". 754r.ucbtest.org. Abgerufen 2019-07-23.
- ^ IEEE 754 2019§9.6.
- ^ Chen, David. "Die Entfernung von Minnum- und Maxnum-Operationen von IEEE 754-2019" (PDF). Grouper.ieee.org. Abgerufen 2020-02-05.
- ^ IEEE 754 2008§5.12.
- ^ IEEE 754 2008, §5.12.2.
- ^ Gay, David M. (1990-11-30). "Richtig abgerundete binäre Dezimal- und Dezimal-Binärumwandlungen". Numerisches Analyse -Manuskript. Murry Hill, NJ, USA: AT & T Laboratories. 90-10.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ Paxson, Vern; Kahan, William (1991-05-22). "Ein Programm zum Testen von IEEE -Dezimal -Binärumwandlung". Manuskript. Citeseerx 10.1.1.144.5889.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ IEEE 754 2008, §5.12.3
- ^ "6.9.3. Hexadezimaler schwimmender Punktliterale - Glasgow Haskell Compiler 9.3.20220129 Benutzerhandbuch". ghc.gitlab.haskell.org. Abgerufen 2022-01-29.
Standards
- IEEE-Standard für binäre Gleitkomma-Arithmetik. ANSI/IEEE STD 754-1985. IEEE. 1985-10-12. S. 1–20. doi:10.1109/IEEESTD.1985.82928. ISBN 0-7381-1165-1.
- IEEE Computer Society (2008-08-29). IEEE-Standard für die Gleitkomma-Arithmetik. IEEE STD 754-2008. IEEE. S. 1–70. doi:10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5. IEEE STD 754-2008.
- IEEE Computer Society (2019-07-22). IEEE-Standard für die Gleitkomma-Arithmetik. IEEE STD 754-2019. IEEE. S. 1–84. doi:10.1109/IEEESTD.2019.8766229. ISBN 978-1-5044-5924-2. IEEE STD 754-2019.
- ISO/IEC/IEEE 60559: 2011-Informationstechnologie-Mikroprozessorsysteme-Floating-Punkt-Arithmetik. ISO.org. Juni 2011. S. 1–58.
- ISO/IEC 60559: 2020-Informationstechnologie-Mikroprozessorsysteme-Gleitkomma-Arithmetik. ISO.org. Mai 2020. S. 1–74.
Sekundäre Referenzen
- Dezimalerschwimmpunkt Arithmetik, FAQs, Bibliographie und Links
- Vergleich von binären Schwimmern
- IEEE 754 Referenzmaterial
- IEEE 854-1987- Geschichte und Minuten
- Zusätzliche Lesungen für IEEE 754. Beinhaltet historische Perspektiven.
Weitere Lektüre
- Goldberg, David (März 1991). "Was jeder Informatiker über die Arithmetik der schwimmenden Punkte wissen sollte". ACM Computing -Umfragen. 23 (1): 5–48. doi:10.1145/103162.103163. S2CID 222008826. Abgerufen 2019-03-08.
- Hecker, Chris (Februar 1996). "Kommen wir zum (schwebenden) Punkt" (PDF). Game Developer Magazine: 19–24. ISSN 1073-922x.
- Severance, Charles (März 1998). "IEEE 754: Ein Interview mit William Kahan" (PDF). IEEE -Computer. 31 (3): 114–115. doi:10.1109/mc.1998.660194. S2CID 33291145. Abgerufen 2019-03-08.
- Cowlishaw, Mike (Juni 2003). "Dezimaler Gleitkomma: Algorismus für Computer". 16. IEEE -Symposium über Computerarithmetik, 2003. Verfahren (PDF). Proceedings 16. IEEE -Symposium auf Computerarithmetik. Los Alamitos, Kalifornien: IEEE Computer Society. S. 104–111. doi:10.1109/arith.2003.1207666. ISBN 978-0-7695-1894-7. S2CID 18713046. Abgerufen 2014-11-14.. (Notiz: Algorismus ist kein Rechtschreibfehler des Titels; siehe auch Algorismus.))
- Monnix, David (Mai 2008). "Die Fallstricke der Überprüfung der Berechnungen für Gleitkomma" ". ACM -Transaktionen zu Programmiersprachen und Systemen. 30 (3): 1–41. Arxiv:CS/0701192. doi:10.1145/1353445.1353446. ISSN 0164-0925. S2CID 218578808.: Ein Kompendium nicht intuitiver Verhaltensweisen von Gleitkomma über beliebte Architekturen mit Auswirkungen auf die Programmüberprüfung und -prüfung.
- Müller, Jean-Michel; Brunie, Nicolas; de Dinechin, Florent; Jeannerod, Claude-Pierre; Joldes, Mioara; Lefèvre, Vincent; Melquiond, Guillaume; Revol, Nathalie; Torres, Serge (2018) [2010]. Handbuch der Gleitkomma-Arithmetik (2 ed.). Birkhäuser. doi:10.1007/978-3-319-76526-6. ISBN 978-3-319-76525-9.
- Overton, Michael L. (2001). Geschrieben bei Courant Institute of Mathematical Sciences, New Yorker Universität, New York, USA. Numerisches Computing mit IEEE -Gleitkomma -Arithmetik (1 ed.). Philadelphia, USA: SIAM. doi:10.1137/1.9780898718072. ISBN 978-0-89871-482-1. 978-0-89871-571-2, 0-89871-571-7.
- Cleve Moler auf schwimmenden Punktzahlen
- Beebe, Nelson H. F. (2017-08-22). Das Mathematical -Funktion -Berechnungshandbuch - Programmierung mithilfe der mathcw tragbaren Softwarebibliothek (1 ed.). Salt Lake City, UT, USA: Springer International Publishing AG. doi:10.1007/978-319-64110-2. ISBN 978-3-319-64109-6. Lccn 2017947446. S2CID 30244721.
- Hough, David G. (Dezember 2019). "Der IEEE Standard 754: einer für die Geschichtsbücher". Computer. IEEE. 52 (12): 109–112. doi:10.1109/mc.2019.2926614. S2CID 208281213.
Externe Links
- Kahan über die Erstellung von IEEE -Standard -Schwimmpunkten. Turing Preisträger Clips. 2020-11-16. Archiviert vom Original am 2021-11-08.
- Online IEEE 754 Binärrechner