Dezimal32-Gleitkommaformat - decimal32 floating-point format

Beim Rechnen ist dezimal32 ein dezimales Fließkomma- Computernummerierungsformat , das 4 Byte (32 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. Wie das binary16- Format ist es für speichersparende Speicherung gedacht.

Decimal32 unterstützt 7 Dezimalziffern von Mantisse und einen Exponenten Bereich von -95 bis +96, dh ± 0,000 000 × 10 -95^ bis ± 9,999 999 × 10 96^ . (Äquivalent ±0 000 001 × 10 −101^ bis ±9 999 999 × 10 90^ .) Da der Signifikand nicht normalisiert ist (es gibt keine implizite führende "1"), haben die meisten Werte mit weniger als 7 signifikanten Stellen mehrere mögliche Darstellungen ; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 usw. Null hat 192 mögliche Darstellungen (384, wenn beide Nullen mit Vorzeichen enthalten sind).

Decimal32 Floating Point ist ein relativ neues dezimales Fließkommaformat, das offiziell in der Version 2008 von IEEE 754 sowie mit ISO/IEC/IEEE 60559:2011 eingeführt wurde .

Darstellung von dezimal32 Werten

Generische Kodierung
Unterschrift Kombination Nachgestelltes signifikantes Feld
1 Bit 11 Bit 20 Bit
s ggggggggggg tttttttttttttttttttt

IEEE 754 erlaubt zwei alternative Darstellungsmethoden für dezimal32-Werte. Der Standard legt nicht fest, wie anzugeben ist, welche Darstellung verwendet wird, beispielsweise in einer Situation, in der dezimal32-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 bieten exakt den gleichen Bereich darstellbarer Zahlen: 7 Stellen des Signifikanden und 3 × 2 6 = 192 mögliche Exponentenwerte.

Bei beiden Codierungen, BID und DPD, werden die 2 höchstwertigen Exponentenbits und die 4 höchstwertigen Bits des Signifikanten zu 5 Bits kombiniert. Die Position der 5 Bits im Kombinationsfeld variiert, ansonsten ist die Codierung jedoch identisch. Statt 6 genügen 5 Bits, da die 2 MSBs des Exponenten nur Werte von 0 bis 2 (3 mögliche Werte) kodieren und die 4 MSBs des Signifikanten eine Dezimalziffer zwischen 0 und 9 darstellen (10 mögliche Werte). Insgesamt haben wir 3*10 = 30 mögliche Werte, wenn wir in einer Codierung kombiniert werden, die in 5 Bits (2^5=32) darstellbar ist.

BID-Codierung des Kombinationsfeldes
Kombinationsfeld MSBs von LSBs des
Exponenten
Beschreibung
g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0 Exponent Bedeutung
0 0 D e F g h ich ein B C 00 0 abc defghi Endliche Zahl
voller binärer Signifikand = 0 abc ttttttttttttttttttt
0 1 01
1 0 10
1 1 0 0 D e F g h ich C 00 100 c Endliche Zahl
voller binärer Signifikand = 100 c ttttttttttttttttttt
1 1 0 1 01
1 1 1 0 10
1 1 1 1 0 ±Unendlich
1 1 1 1 1 NaN (mit Nutzlast im Significand)
DPD-Kodierung des Kombinationsfeldes
Kombinationsfeld MSBs von LSBs des
Exponenten
Die führende
Dezimalziffer von Significand
Beschreibung
g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0 Exponent Bedeutung
0 0 ein B C D e F g h ich 00 0 abc defghi 4*a + 2*b + c Endliche Zahl mit
0 1 01
1 0 10
1 1 0 0 C 00 100 c 8 + c Endliche Zahl mit
1 1 0 1 01
1 1 1 0 10
1 1 1 1 0 ±Unendlich
1 1 1 1 1 NaN (mit Nutzlast im Significand)

Für die BID-Codierung wird der vollständige binäre Signifikand durch Anhängen der Bits aus dem Feld des nachfolgenden Signifikanten an die MSBs des Signifikanden erhalten, wie in der obigen BID-Tabelle gezeigt. Der resultierende Signifikand ist eine positive binäre ganze Zahl von 24 Bit, die wiederholt durch 10 geteilt werden muss, um die einzelnen Dezimalstellen zu erhalten.

Für die DPD-Codierung zeigt die obige DPD-Tabelle, wie man die führende Dezimalziffer des Signifikanten aus den MSBs des Signifikanden erhält. Um die nachgestellten signifikanten und dezimalen Stellen zu erhalten, muss das signifikante nachfolgende Feld nach den DPD-Regeln (siehe unten) dekodiert werden. Der volle Dezimal-Signifikand wird dann durch Verketten der führenden und nachgestellten Dezimalziffern erhalten.

Für ±Unendlich werden außer dem Vorzeichenbit alle verbleibenden Bits ignoriert (dh sowohl das Exponenten- als auch das Signifikand-Feld haben keine Wirkung). Bei NaNs hat das Vorzeichenbit im Standard keine Bedeutung und wird ignoriert. Daher sind signierte und nicht signierte NaNs gleichwertig, auch wenn einige Programme NaNs als signiert anzeigen. Das Bit g5 bestimmt, ob das NaN ruhig (0) ist oder signalisiert (1). Die Bits des Signifikanten sind die Nutzlast des NaN und können benutzerdefinierte Daten enthalten (z. B. um zu unterscheiden, wie NaNs erzeugt wurden). Wie bei normalen Signifikanten kann die Nutzlast von NaNs entweder in BID- oder DPD-Kodierung vorliegen.

Binäres Integer-Signifikandenfeld

Dieses Format verwendet einen binären Signifikand von 0 bis 10 7  − 1 = 9 999 999  = 98967F 16  = 1001 1000100101 1001111111 2 . Die Codierung kann binäre Signifikanden bis zu 10 × 2 20  − 1 = 10 485 759  = 9FFFFF 16  = 1001 1111111111 1111111111 2 darstellen , aber Werte größer als 10 7  − 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 8 Bits nach dem Vorzeichenbit und der Vorzeichen sind die restlichen 23 Bits, mit einer impliziten führenden 0 Bit:

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

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

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

s 1100eeeeee (100)t tttttttttt tttttttttt
s 1101eeeeee (100)t tttttttttt tttttttttt
s 1110eeeeee (100)t 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.

Die führenden Bits des Signifikand-Feldes codieren nicht die höchstwertige Dezimalstelle; sie sind einfach Teil einer größeren rein-binären Zahl. Zum Beispiel wird ein Signifikand von 8 000 000 als binär 0111 1010000100 1000000000 codiert , wobei die führenden 4 Bits 7 codieren; der erste Signifikand, der ein 24. Bit benötigt, ist 2 23  = 8 388 608

In den obigen Fällen ist der dargestellte Wert

(−1) Vorzeichen  × 10 Exponent−101  × 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 sechs Bits danach sind das Exponentenfortsetzungsfeld, das die weniger signifikanten Bits des Exponenten bereitstellt.

Die letzten 20 Bits sind das Signifikanz-Fortsetzungsfeld, das aus zwei 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)eeeeee (0TTT)[tttttttttt][tttttttttt]
s 01 TTT (01)eeeeee (0TTT)[tttttttttt][tttttttttt]
s 10 TTT (10)eeeeee (0TTT)[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)eeeeee (100T)[tttttttttt][tttttttttt]
s 1101 T (01)eeeeee (100T)[tttttttttt][tttttttttt]
s 1110 T (10)eeeeee (100T)[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 h 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 h F 1 0 1 ich 0 abc 100 f 0 ghi (0–7) (8–9) (0–7)
g h 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 h 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 den berechneten Ergebnissen immer 0. (Die 8 × 3 = 24 nicht standardmäßigen Kodierungen 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

Verweise