Dezimal64-Gleitkommaformat - decimal64 floating-point format

In der Computerbranche ist dezimal64 ein dezimales Fließkomma- Computernummerierungsformat , das 8 Byte (64 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.

Decimal64 unterstützt 16 Dezimalstellen des Signifikands und einen Exponentenbereich von −383 bis +384, dh ±0,00000 000 000 000 000 × 10 −383^ bis ±9,999 999 999 999 999 × 10 384^ . (Äquivalent ±0 000 000 000 000 000 × 10 –398^ bis ±9 999 999 999 999 999 × 10 369^ .) Im Gegensatz dazu hat das entsprechende Binärformat, das am häufigsten verwendet wird, einen ungefähren Bereich von ±0,000 000 000 000 001 × 10 −308^ bis ±1.797 693 134 862 315 × 10 308^ . Da der Signifikand nicht normalisiert ist, haben die meisten Werte mit weniger als 16 signifikanten Stellen mehrere mögliche Darstellungen; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 usw. Null hat 768 mögliche Darstellungen (1536, wenn beide Nullen mit Vorzeichen enthalten sind).

Decimal64 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 von dezimal64 Werten

Schild Kombination Fortsetzung des Exponenten Bedeutende Fortsetzung
1 Bit 5 Bit 8 Bit 50 Bit
so mmmmm xxxxxxxxx cccccccccccccccccccccccccccccccccccccccccccccc

IEEE 754 erlaubt zwei alternative Darstellungsmethoden für dezimale64-Werte. Der Standard legt nicht fest, wie angegeben wird, welche Darstellung verwendet wird, beispielsweise in einer Situation, in der dezimal64-Werte zwischen Systemen übertragen werden:

  • Bei der binären Darstellungsmethode wird der 16-stellige Signifikand als binär codierte positive ganze Zahl basierend auf binärer ganzzahliger Dezimalzahl (BID) dargestellt.
  • Bei der dezimalen Darstellungsmethode wird der 16-stellige Signifikand als dezimal codierter positiver Integer dargestellt, basierend auf dicht gepackten Dezimalzahlen (DPD) mit 5 Gruppen von 3 Stellen (außer der höchstwertigen Stelle, die speziell codiert ist) werden jeweils in Declets dargestellt (10 -Bitfolgen). Dies ist ziemlich effizient, denn 2 10 = 1024 ist nur wenig mehr als nötig, um noch alle Zahlen von 0 bis 999 zu enthalten.

Beide Alternativen bieten exakt den gleichen Bereich darstellbarer Zahlen: 16 Stellen Signifikand und 3 × 2 8  = 768 mögliche dezimale Exponentenwerte. (Alle möglichen dezimalen Exponentenwerte, die in einer binären 64- Zahl speicherbar sind, sind in dezimal64 darstellbar, und die meisten Bits des Signifikanten einer binären 64- Zahl werden mit ungefähr der gleichen Anzahl von Dezimalstellen im Signifikand gespeichert.)

In beiden Fällen werden die höchstwertigen 4 Bits des Signifikanden (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 eines 5-Bit zu verwenden Feld. Die restlichen Kombinationen codieren Unendlichkeiten und NaNs .

Kombinationsfeld Exponent Msbits Signifikante Msbits Andere
00mmm 00 0xxx
01mmm 01 0xxx
10 mm 10 0xxx
1100m 00 100x
1101m 01 100x
1110m 10 100x
11110 ±Unendlich
11111 NaN. Vorzeichenbit ignoriert. Das erste Bit des Exponentenfortsetzungsfeldes bestimmt, ob 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 einen binären  Wert von 0 bis 10 16  − 1 = 9 999 999 999 999 999 = 2386F26FC0FFFF 16  = 1000 1110000110 1111001001 1011111100 0000111111 1111111111 2 .

Die Kodierung, die vollständig auf 64 Bit gespeichert ist, kann binäre Signifikanden bis zu 10 × 2 50  − 1 = 11 258 999 068 426 239  = 27FFFFFFFFFFFF 16 darstellen , aber Werte größer als 10 16  − 1 sind illegal (und der Standard erfordert Implementierungen zur Behandlung sie als 0, wenn sie bei der Eingabe angetroffen werden).

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 10 Bits, die dem Vorzeichenbit folgen, und der Vorzeichen sind die restlichen 53 Bits, mit einer impliziten führenden 0 bisschen:

s 00eeeeeeee   (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
s 01eeeeeeee   (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
s 10eeeeeeee   (0)ttt 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, wird das 10-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 51 Bit. In diesem Fall gibt es eine implizite (also nicht gespeicherte) führende 3-Bit-Folge "100" für die meisten Bits des wahren Signifikanden (in den restlichen unteren Bits ttt...ttt des Signifikanden sind nicht alle möglichen Werte all benutzt).

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

Die 2-Bit-Folge "11" nach dem Vorzeichenbit zeigt an, dass es ein implizites 3-Bit-Präfix "100" zum Signifikanten gibt. Vergleichen Sie mit einem impliziten 1-Bit-Präfix "1" im Vorzeichen der Normalwerte für die Binärformate. Die 2-Bit-Sequenzen "00", "01" oder "10" nach dem Vorzeichenbit 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 kann eine Mantisse von 8 000 000 000 000 000 wird als binär codierte 0111 0001101011 1111010100 zehntausendelf Millionen elf 0100000000 0000000000 2 , wobei die führenden 4 Bits codieren , 7; der erste Signifikand, der ein 54. Bit erfordert, ist 2 53  = 9 007 199 254 740 992 . Der höchste gültige Wert ist 9 999 999 999 999 999, dessen binäre Kodierung (100) 0 1110000110 1111001001 1011111100 0000111111 1111111111 2 ist (wobei die 3 höchstwertigen Bits (100) nicht gespeichert, sondern implizit sind, wie oben gezeigt; und das nächste Bit ist immer Null in gültigen Codierungen).

In den obigen Fällen ist der dargestellte Wert

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

Die letzten 50 Bits sind das Signifikanz-Fortsetzungsfeld, das aus fünf 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 "TTT" danach werden als führende Dezimalziffer interpretiert ( 0 bis 7):

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

Wenn die ersten beiden Bits nach dem Vorzeichenbit "11" sind, dann sind die zweiten 2 Bits die führenden Bits des Exponenten und dem nächsten Bit "T" werden implizite Bits "100" vorangestellt, um die führende Dezimalziffer zu bilden ( 8 oder 9):

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

Die verbleibenden zwei Kombinationen (11 110 und 11 111) des 5-Bit-Feldes nach dem Vorzeichenbit 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