dziesiętny128 format zmiennoprzecinkowy - decimal128 floating-point format

W obliczeniowej , decimal128 jest dziesiętny zmiennoprzecinkową w formacie numeracja komputer , który zajmuje 16 bajtów (128) bitów w pamięci komputera. Jest przeznaczony do zastosowań, w których konieczne jest dokładne emulowanie zaokrąglania dziesiętnego, takich jak obliczenia finansowe i podatkowe.

Decimal128 podpory 34 cyfr dziesiętnych z mantysy i jest wykładnik zakres -6143 do +6144, tj ± 0,000 000 000 000 000 000 000 000 000 000 000 x 10 -6143^ do ± 9,999 999 999 999 999 999 999 999 999 999 999 x 10 6144^ . (Równoważnie ± 0 000 000 000 000 000 000 000 000 000 000 000 x 10 -6176^ do ± 9 999 999 999 999 999 999 999 999 999 999 999 x 10 6111^ ). Dlatego też decimal128 ma największy zakres wartości w porównaniu z inne podstawowe formaty zmiennoprzecinkowe IEEE. Ponieważ significand nie jest znormalizowany, większość wartości z mniej niż 34 cyframi znaczącymi ma wiele możliwych reprezentacji; 1 x 10 2 = 0,1 x 10 3 = 0,01 x 10 4 itp zera 12 288 możliwych przedstawień ( 24 576 , jeżeli obie podpisane zera w zestawie).

Decimal128 zmiennoprzecinkowych jest stosunkowo nowy format dziesiętny zmiennoprzecinkową, formalnie wprowadzone w wersji 2008 z IEEE 754 , jak również z normą ISO / IEC / IEEE 60559: 2011 .

Reprezentacja wartości dziesiętnych128

Znak Połączenie Znacząca i kontynuacja
1 bit 17 bitów 110 bitów
s mmmmmmmmmmmmmmmmm cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

IEEE 754 dopuszcza dwie alternatywne metody reprezentacji dla wartości dziesiętnych128. Norma nie precyzuje, jak oznaczać, która reprezentacja jest używana, na przykład w sytuacji, gdy między systemami przesyłane są wartości dziesiętne128.

W jednej metodzie reprezentacji, opartej na binarnej liczbie całkowitej dziesiętnej (BID), znak znaczący jest reprezentowany jako dodatnia liczba całkowita zakodowana binarnie.

Druga, alternatywna metoda reprezentacji opiera się na gęsto upakowanym dziesiętnym (DPD) dla większości znaczącej (z wyjątkiem najbardziej znaczącej cyfry).

Obie alternatywy zapewniają dokładnie ten sam zakres reprezentowalnych liczb: 34 cyfry znaczenia i 3 × 2 12  = 12 288 możliwych wartości wykładników.

W obu przypadkach najbardziej znaczące 4 bity znaczącego (które w rzeczywistości mają tylko 10 możliwych wartości) są łączone z najbardziej znaczącymi 2 bitami wykładnika (3 możliwe wartości), aby użyć 30 z 32 możliwych wartości 5 bitów w pole kombinacji. Pozostałe kombinacje kodują nieskończoności i NaN .

Pole kombinacji Wykładnik potęgowy Znaczące i msbity Inny
00mmmmmmmmmmmmmmmm 00xxxxxxxxxxxx 0cc
01mmmmmmmmmmmmmmmm 01xxxxxxxxxxxx 0cc
10mmmmmmmmmmmmmmmm 10xxxxxxxxxxxx 0cc
1100mmmmmmmmmmmmm 00xxxxxxxxxxxx 100c
1101mmmmmmmmmmmmmm 01xxxxxxxxxxxx 100c
1110mmmmmmmmmmmmm 10xxxxxxxxxxxx 100c
11110mmmmmmmmmmmm ±Nieskończoność
11111mmmmmmmmmmmm NaN. Bit znaku zignorowany. Szósty bit pola kombinacji określa, czy sygnalizuje NaN.

W przypadku Infinity i NaN wszystkie pozostałe bity kodowania są ignorowane. W ten sposób można zainicjować tablicę do Infinities lub NaNs, wypełniając ją wartością jednobajtową.

Pole binarnych liczb całkowitych i znaczące

Format ten wykorzystuje binarną mantysy od 0 do 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 . Kodowanie może reprezentować znaczenie binarne do 10 × 2 110-1  = 12 980 742 146 337 069 071 326 240 823 050 239, ale wartości większe niż 10 34-1  są niedozwolone (a standard wymaga, aby implementacje traktowały je jako 0, jeśli napotkane na wejściu).

Jak opisano powyżej, kodowanie różni się w zależności od tego, czy najbardziej znaczące 4 bity znaczącego znajdują się w zakresie od 0 do 7 (0000 2 do 0111 2 ) lub wyższym (1000 2 lub 1001 2 ).

Jeśli 2 bity po bicie znaku to „00”, „01” lub „10”, to pole wykładnika składa się z 14 bitów następujących po bicie znaku, a significand to pozostałe 113 bitów, z niejawnym początkowym 0 kawałek:

 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  

Obejmuje to liczby podnormalne, w których wiodąca cyfra znacząca i cyfra wynosi 0.

Jeśli 2 bity po bicie znaku to „11”, to 14-bitowe pole wykładnika jest przesunięte o 2 bity w prawo (po obu bitach znaku i późniejszych bitach „11”), a reprezentowany znak znajduje się w pozostałych 111 bitów. W tym przypadku istnieje niejawna (to znaczy nie przechowywana) wiodąca 3-bitowa sekwencja „100” w prawdziwym znaczeniu.

 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

Sekwencja 2-bitowa „11” po bicie znaku wskazuje, że istnieje niejawny 3-bitowy prefiks „100” do znaku znaczącego. Porównaj posiadanie niejawnego 1 w significand normalnych wartości dla formatów binarnych. Bity „00”, „01” lub „10” są częścią pola wykładnika.

W przypadku formatu decimal128 wszystkie te znaczące są poza obowiązującym zakresem (zaczynają się od 2 113  > 1,038 × 10 34 ), a zatem są dekodowane jako zero, ale wzorzec jest taki sam jak decimal32 i decimal64 .

W powyższych przypadkach reprezentowana wartość to

(−1) znak × 10 wykładnik−6176 × istotna

Jeśli cztery bity po bicie znaku to „1111”, to wartość jest nieskończonością lub NaN, jak opisano powyżej:

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

Gęsto upakowane pole znaczeń dziesiętnych

W tej wersji znaczek jest przechowywany jako seria cyfr dziesiętnych. Cyfra wiodąca zawiera się w przedziale od 0 do 9 (3 lub 4 bity binarne), a reszta cyfry znaczącej używa kodowania gęsto upakowanego dziesiętnego (DPD).

Pierwsze 2 bity wykładnika i pierwsza cyfra (3 lub 4 bity) znaczącego są łączone w pięć bitów następujących po bicie znaku.

Kolejne dwanaście bitów to pole kontynuacji wykładnika, zapewniające mniej znaczące bity wykładnika.

Ostatnie 110 bitów to pole significi kontynuacji, składające się z jedenastu 10-bitowych dekletów . Każdy declet koduje trzy cyfry dziesiętne przy użyciu kodowania DPD.

Jeśli pierwsze dwa bity po bicie znaku to „00”, „01” lub „10”, to są to wiodące bity wykładnika, a trzy kolejne bity są interpretowane jako wiodąca cyfra dziesiętna (od 0 do 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]

Jeśli pierwsze dwa bity po bicie znaku to „11”, to drugie dwa bity są wiodącymi bitami wykładnika, a ostatni bit jest poprzedzony „100”, tworząc wiodącą cyfrę dziesiętną (8 lub 9):

 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]

Pozostałe dwie kombinacje (11110 i 11111) pola 5-bitowego są używane do reprezentowania odpowiednio ± nieskończoności i NaNs.

Transkodowanie DPD/3BCD dla dekletów podano w poniższej tabeli. b9...b0 to bity DPD, a d2...d0 to trzy cyfry BCD.

Gęsto upakowane zasady kodowania dziesiętnego
Zakodowana wartość DPD Cyfry dziesiętne
Przestrzeń kodowa (1024 stany) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Zakodowane wartości Opis Zdarzenia (1000 stanów)
50,0% (512 stanów) za b do re mi fa 0 sol h ja 0 abc 0 def 0 ghi (0–7) (0–7) (0–7) Trzy małe cyfry 51,2% (512 stanów)
37,5% (384 stany) za b do re mi fa 1 0 0 ja 0 abc 0 def 100 I (0–7) (0–7) (8–9) Dwie małe cyfry,
jedna duża
38,4% (384 stany)
za b do sol h fa 1 0 1 ja 0 abc 100 f 0 ghi (0–7) (8–9) (0–7)
sol h do re mi fa 1 1 0 ja 100 centów 0 def 0 ghi (8–9) (0–7) (0–7)
9,375% (96 stanów) sol h do 0 0 fa 1 1 1 ja 100 centów 100 f 0 ghi (8–9) (8–9) (0–7) Jedna mała cyfra,
dwie duże
9,6% (96 stanów)
re mi do 0 1 fa 1 1 1 ja 100 centów 0 def 100 I (8–9) (0–7) (8–9)
za b do 1 0 fa 1 1 1 ja 0 abc 100 f 100 I (0–7) (8–9) (8–9)
3,125% (32 stany, 8 używanych) x x do 1 1 fa 1 1 1 ja 100 centów 100 f 100 I (8–9) (8–9) (8–9) Trzy duże cyfry, bity b9 i b8 to nie obchodzi 0,8% (8 stanów)

Każda z 8 wartości dziesiętnych, których cyfry to 8 lub 9, ma cztery kody. Bity oznaczone x w powyższej tabeli są ignorowane na wejściu, ale zawsze będą równe 0 w wynikach obliczeń. (8 × 3 = 24 niestandardowe kodowania wypełniają lukę między 10 3  = 1000 a 2 10  = 1024.)

W powyższych przypadkach, gdy prawdziwe znaczenie i dekodowany ciąg cyfr dziesiętnych, reprezentowana wartość to

Zobacz też

Bibliografia