Dezimal128 Gleitkommaformat - decimal128 floating-point format

Beim Rechnen ist dezimal128 ein dezimales Fließkomma- Computernummerierungsformat , das 16 Byte (128 Bit) im Computerspeicher belegt. Es ist für Anwendungen gedacht, bei denen es erforderlich ist, Dezimalrunden genau zu emulieren, wie z. B. Finanz- und Steuerberechnungen.

Decimal128 unterstützt 34 Dezimalstellen des Signifikands und einen Exponentenbereich von −6143 bis +6144, dh ±0,00000 000 000 000 000 000 000 000 000 000 000 × 10 −6143^ bis ±9,999 999 999 999 999 999 999 999 999 999 999 × 10 6144^ . (Äquivalent ±0 000 000 000 000 000 000 000 000 000 000 000 × 10 −6176^ bis ±9 999 999 999 999 999 999 999 999 999 999 999 × 10 6111^ .) Daher hat dezimal128 den größten Wertebereich im Vergleich zu andere IEEE-Basis-Gleitkommaformate. Da der Signifikand nicht normalisiert ist, haben die meisten Werte mit weniger als 34 signifikanten Stellen mehrere mögliche Darstellungen; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 usw. Null hat 12 288 mögliche Darstellungen ( 24 576, wenn beide Nullen mit Vorzeichen enthalten sind).

Dezimal128 Gleitkomma ist ein relativ neues dezimales Gleitkommaformat, das offiziell in der Version 2008 von IEEE 754 sowie mit ISO/IEC/IEEE 60559:2011 eingeführt wurde .

Darstellung dezimaler 128 Werte

Schild Kombination Bedeutende Fortsetzung
1 Bit 17 Bit 110 Bit
so mmmmmmmmmmmmmmmmmm cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

IEEE 754 erlaubt zwei alternative Darstellungsmethoden für dezimale128 Werte. Die Norm legt nicht fest, wie angegeben wird, welche Darstellung verwendet wird, beispielsweise in einer Situation, in der dezimale128 Werte zwischen Systemen übertragen werden.

Bei einem Darstellungsverfahren, das auf binär ganzzahliger Dezimalzahl (BID) basiert , wird der Signifikand als binär codierte positive ganze Zahl dargestellt.

Die andere, alternative Darstellungsmethode basiert für den größten Teil des Signifikanten (außer der höchstwertigen Stelle) auf dicht gepackten Dezimalzahlen (DPD).

Beide Alternativen liefern exakt den gleichen Bereich darstellbarer Zahlen: 34 Stellen des Signifikanden und 3 × 2 12  = 12 288 mögliche Exponentenwerte.

In beiden Fällen werden die höchstwertigen 4 Bits des Signifikanten (die eigentlich nur 10 mögliche Werte haben) mit den höchstwertigen 2 Bits des Exponenten (3 mögliche Werte) kombiniert, um 30 der 32 möglichen Werte von 5 Bits im . zu verwenden Kombinationsfeld. Die restlichen Kombinationen codieren Unendlichkeiten und NaNs .

Kombinationsfeld Exponent Signifikante Msbits Andere
00mmmmmmmmmmmmmmmm 00xxxxxxxxxxxx 0ccc
01mmmmmmmmmmmmmmmm 01xxxxxxxxxxxx 0ccc
10mmmmmmmmmmmmmmmm 10xxxxxxxxxxxx 0ccc
1100mmmmmmmmmmmmmm 00xxxxxxxxxxxx 100c
1101mmmmmmmmmmmmmm 01xxxxxxxxxxxx 100c
1110mmmmmmmmmmmmmm 10xxxxxxxxxxxx 100c
11110mmmmmmmmmmmm ±Unendlich
11111mmmmmmmmmmmm NaN. Vorzeichenbit ignoriert. Das sechste Bit des Kombinationsfeldes bestimmt, ob die NaN signalisiert.

Bei Infinity und NaN werden alle anderen Bits der Codierung ignoriert. Somit ist es möglich, ein Array auf Unendlich oder NaNs zu initialisieren, indem es mit einem einzelnen Byte-Wert gefüllt wird.

Binäres Integer-Signifikandenfeld

Dieses Format verwendet eine binäre Mantisse von 0 bis 10 34  - 1 = 9 999 999 999 999 999 999 999 999 999 999 999  = 1ED09BEAD87C0378D8E63FFFFFFFF 16  = 0111 1011010000 1001101111 1010101101 1000011111 0000000011 0111100011 0110001110 0110001111 1111111111 1111111111 1111111111 2 . Die Codierung kann binäre Signifikanden bis zu 10 × 2 110  − 1 = 12 980 742 146 337 069 071 326 240 823 050 239 darstellen, aber Werte größer als 10 34  − 1 sind unzulässig (und der Standard verlangt von Implementierungen, dass sie als 0 behandelt werden, wenn bei der Eingabe angetroffen).

Wie oben beschrieben variiert die Codierung in Abhängigkeit davon, ob die vier höchstwertigen Bits des Signifikanten im Bereich von 0 bis 7 (0000 2 bis 0111 2 ) oder höher (1000 2 oder 1001 2 ) liegen.

Wenn die 2 Bits nach dem Vorzeichenbit "00", "01" oder "10" sind, besteht das Exponentenfeld aus den 14 Bits nach dem Vorzeichenbit und der Vorzeichen sind die restlichen 113 Bits, mit einer impliziten führenden 0 bisschen:

 s 00eeeeeeeeeeee   (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
 s 01eeeeeeeeeeee   (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
 s 10eeeeeeeeeeee   (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt  

Dies schließt subnormale Zahlen ein, bei denen die führende Ziffer 0 ist.

Wenn die 2 Bits nach dem Vorzeichenbit "11" sind, dann wird das 14-Bit-Exponentenfeld um 2 Bits nach rechts verschoben (nach dem Vorzeichenbit und den "11"-Bits danach) und der dargestellte Signifikand befindet sich im Rest 111 Bit. In diesem Fall liegt eine implizite (dh nicht gespeicherte) führende 3-Bit-Folge "100" im wahren Signifikand vor.

 s 1100eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
 s 1101eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
 s 1110eeeeeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt

Die 2-Bit-Sequenz "11" nach dem Vorzeichenbit zeigt an, dass es ein implizites 3-Bit-Präfix "100" für den Signifikanten gibt. Vergleichen Sie mit einer impliziten 1 im Signifikanz von Normalwerten für die Binärformate. Die Bits "00", "01" oder "10" sind Teil des Exponentenfeldes.

Für das dezimale128-Format liegen alle diese Signifikanden außerhalb des gültigen Bereichs (sie beginnen mit 2 113  > 1,038 × 10 34 ) und werden daher als Null decodiert, aber das Muster ist dasselbe wie decimal32 und decimal64 .

In den obigen Fällen ist der dargestellte Wert

(−1) Vorzeichen × 10 Exponent−6176 × Signifikand

Wenn die vier Bits nach dem Vorzeichenbit "1111" sind, ist der Wert eine Unendlichkeit oder eine NaN, wie oben beschrieben:

s 11110 xx...x    ±infinity
s 11111 0x...x    a quiet NaN
s 11111 1x...x    a signalling NaN

Dicht gepacktes Dezimal-Signifikandenfeld

In dieser Version wird der Signifikand als Folge von Dezimalziffern gespeichert. Die führende Ziffer liegt zwischen 0 und 9 (3 oder 4 binäre Bits), und der Rest des Signifikanten verwendet die dichte gepackte Dezimalcodierung (DPD).

Die führenden 2 Bits des Exponenten und die führende Ziffer (3 oder 4 Bits) des Signifikanden werden zu den fünf Bits zusammengefasst, die dem Vorzeichenbit folgen.

Diese zwölf Bits danach sind das Exponentenfortsetzungsfeld, das die weniger signifikanten Bits des Exponenten bereitstellt.

Die letzten 110 Bits sind das Signifikanz-Fortsetzungsfeld, das aus elf 10-Bit- Delets besteht . Jedes Declet codiert drei Dezimalstellen unter Verwendung der DPD-Codierung.

Wenn die ersten beiden Bits nach dem Vorzeichenbit "00", "01" oder "10" sind, dann sind dies die führenden Bits des Exponenten und die drei Bits danach werden als führende Dezimalstelle interpretiert (0 bis 7 ):

 s 00 TTT (00)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
 s 01 TTT (01)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
 s 10 TTT (10)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]

Wenn die ersten beiden Bits nach dem Vorzeichenbit "11" sind, dann sind die zweiten beiden Bits die führenden Bits des Exponenten und dem letzten Bit wird "100" vorangestellt, um die führende Dezimalstelle (8 oder 9) zu bilden:

 s 1100 T (00)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
 s 1101 T (01)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
 s 1110 T (10)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]

Die verbleibenden zwei Kombinationen (11110 und 11111) des 5-Bit-Feldes werden verwendet, um ±unendlich bzw. NaNs darzustellen.

Die DPD/3BCD-Transkodierung für die Declets ist in der folgenden Tabelle angegeben. b9...b0 sind die Bits des DPD und d2...d0 sind die drei BCD-Ziffern.

Dicht gepackte dezimale Kodierungsregeln
DPD-codierter Wert Dezimalziffern
Coderaum (1024 Staaten) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Werte kodiert Beschreibung Vorkommen (1000 Staaten)
50,0 % (512 Staaten) ein b c d e f 0 G ha ich 0 abc 0 def 0 ghi (0–7) (0–7) (0–7) Drei kleine Ziffern 51,2% (512 Staaten)
37,5% (384 Staaten) ein b c d e f 1 0 0 ich 0 abc 0 def 100 ich (0–7) (0–7) (8–9) Zwei kleine Ziffern,
eine große
38,4% (384 Staaten)
ein b c G ha f 1 0 1 ich 0 abc 100 f 0 ghi (0–7) (8–9) (0–7)
G ha c d e f 1 1 0 ich 100 c 0 def 0 ghi (8–9) (0–7) (0–7)
9,375% (96 Staaten) G ha c 0 0 f 1 1 1 ich 100 c 100 f 0 ghi (8–9) (8–9) (0–7) Eine kleine Ziffer,
zwei große
9,6% (96 Staaten)
d e c 0 1 f 1 1 1 ich 100 c 0 def 100 ich (8–9) (0–7) (8–9)
ein b c 1 0 f 1 1 1 ich 0 abc 100 f 100 ich (0–7) (8–9) (8–9)
3,125% (32 Staaten, 8 verwendet) x x c 1 1 f 1 1 1 ich 100 c 100 f 100 ich (8–9) (8–9) (8–9) Drei große Ziffern, Bits b9 und b8 sind egal 0,8% (8 Staaten)

Die 8 Dezimalwerte, deren Ziffern alle 8er oder 9er sind, haben jeweils vier Kodierungen. Die in der obigen Tabelle mit x gekennzeichneten Bits werden bei der Eingabe ignoriert , sind aber in berechneten Ergebnissen immer 0. (Die 8 × 3 = 24 nicht standardmäßigen Codierungen füllen die Lücke zwischen 10 3  = 1000 und 2 10  = 1024.)

In den obigen Fällen ist der dargestellte Wert mit dem wahren Signifikanden als Folge der dekodierten Dezimalziffern

Siehe auch

Verweise