desetinný formát s plovoucí desetinnou čárkou - decimal128 floating-point format

Ve výpočtu , decimal128 je desítkové s plovoucí desetinnou čárkou počítač číslování formát , který zabírá 16 bajtů (128 bitů) v paměti počítače. Je určen pro aplikace, kde je nutné přesně emulovat zaokrouhlování desetinných míst, například finanční a daňové výpočty.

Decimal128 podporuje 34 desítkové číslice na mantisy a exponent rozsah -6.143-6144, tj ± 0,000 000 000 000 000 000 000 000 000 000 000 x 10 -6143^± 9,999 999 999 999 999 999 999 999 999 999 999 x 10 6144^ . (Ekvivalentně ± 0 000 000 000 000 000 000 000 000 000 000 000 000 × 10 −6176^± 9 999 999 999 999 999 999 999 999 999 999 999 999 × 10 6111.^ ) Proto má desítkové 128 největší rozsah hodnot ve srovnání s další základní formáty s plovoucí desetinnou čárkou IEEE. Protože význam není normalizován, většina hodnot s méně než 34 platnými číslicemi má několik možných reprezentací; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 atd. Nula má 12 288 možných zobrazení ( 24 576, pokud jsou zahrnuty obě podepsané nuly ).

Decimal128 s pohyblivou řádovou čárkou je relativně nový formát desetinného s plovoucí desetinnou čárkou, oficiálně představen ve verzi 2008 z IEEE 754 , stejně jako s ISO / IEC / IEEE 60559: 2011 .

Reprezentace desetinných hodnot 128

Podepsat Kombinace Významné pokračování
1 bit 17 bitů 110 bitů
s mmmmmmmmmmmmmmmmmmm cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

IEEE 754 umožňuje dvě alternativní metody reprezentace desetinných hodnot. Norma neurčuje, jak označit, která reprezentace se používá, například v situaci, kdy jsou mezi systémy komunikovány desítkové hodnoty.

V jedné metodě reprezentace, založené na binárním celočíselném desítkovém čísle (BID), je význam reprezentován jako binárně kódované kladné celé číslo.

Druhá alternativní metoda reprezentace je založena na hustě zabaleném desítkovém čísle (DPD) pro většinu významů (kromě nejvýznamnější číslice).

Obě alternativy poskytují přesně stejný rozsah reprezentovatelných čísel: 34 číslic znaménka a 3 × 2 12  = 12 288 možných hodnot exponentů.

V obou případech jsou nejvýznamnější 4 bity významnosti (které mají ve skutečnosti pouze 10 možných hodnot) kombinovány s nejvýznamnějšími 2 bity exponenta (3 možné hodnoty), aby bylo možné použít 30 z 32 možných hodnot 5 bitů v kombinační pole. Zbývající kombinace kódují nekonečna a NaN .

Kombinované pole Exponent Významné Msbits jiný
00mmmmmmmmmmmmmmmmm 00xxxxxxxxxxxx 0ccc -
01mmmmmmmmmmmmmmmmm 01xxxxxxxxxxxx 0ccc -
10mmmmmmmmmmmmmmmmm 10xxxxxxxxxxxx 0ccc -
1100mmmmmmmmmmmmm 00xxxxxxxxxxxx 100c -
1101mmmmmmmmmmmmm 01xxxxxxxxxxxx 100c -
1110mmmmmmmmmmmmm 10xxxxxxxxxxxx 100c -
11110mmmmmmmmmmmm - - ± nekonečno
11111mmmmmmmmmmmm - - NaN. Znamení bit ignorováno. Šestý bit kombinovaného pole určuje, zda NaN signalizuje.

V případě Infinity a NaN jsou všechny ostatní bity kódování ignorovány. Je tedy možné inicializovat pole na Infinities nebo NaN vyplněním jedinou hodnotou bajtu.

Pole významového binárního celého čísla

Tento formát používá binární mantisy od 0 až 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 . Kódování může představovat binární významy až 10 × 2 110  - 1 = 12 980 742 146 337 069 071 326 240 823 050 239, ale hodnoty větší než 10 34  - 1 jsou nelegální (a standard vyžaduje implementace, aby s nimi zacházelo jako s 0, pokud na vstupu).

Jak je popsáno výše, kódování se liší v závislosti na tom, zda nejvýznamnější 4 bity významnosti jsou v rozsahu 0 až 7 (0000 2 až 0111 2 ) nebo vyšší (1000 2 nebo 1001 2 ).

Pokud jsou 2 bity za bitem znaménka „00“, „01“ nebo „10“, pak pole exponentu sestává ze 14 bitů následujících za bitem znaménka a významem je zbývajících 113 bitů s implicitní úvodní nulou bit:

 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  

To zahrnuje podnormální čísla, kde je první významná číslice 0.

Pokud jsou 2 bity po bitu znaménka „11“, pak je 14bitové pole exponentu posunuto o 2 bity doprava (po bitu znaménka i bitu „11“ dále) a reprezentovaný význam je ve zbývajících 111 bitů. V tomto případě existuje implicitní (tj. Ne uložená) úvodní 3bitová sekvence „100“ ve skutečném významu.

 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

"11" 2-bitová sekvence po bitu znaménka naznačuje, že existuje implicitní "100" 3-bitová předpona významnosti. Porovnejte implicitní hodnotu 1 v mínusu normálních hodnot pro binární formáty. Bity „00“, „01“ nebo „10“ jsou součástí pole exponentu.

Pro formát decimal128, všechny tyto significands jsou mimo povolený rozsah (začnou s 2 113  > 1,038 × 10 34 ), a jsou tudíž dekódovány jako nula, ale model je stejný jako decimal32 a decimal64 .

Ve výše uvedených případech je představovaná hodnota

(−1) znaménko × 10 exponent − 6176 × mantinel

Pokud jsou čtyři bity po bitu znaménka „1111“, pak je hodnota nekonečno nebo NaN, jak je popsáno výše:

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

Hustě zabalené desítkové významné pole

V této verzi je význam je uložen jako řada desetinných míst. Počáteční číslice je mezi 0 a 9 (3 nebo 4 binární bity) a zbytek mantinky používá hustě zabalené dekadické kódování (DPD).

Počáteční 2 bity exponenta a úvodní číslice (3 nebo 4 bity) znaménka jsou kombinovány do pěti bitů, které následují po znaménkovém bitu.

Po těchto dvanácti bitech následuje pole pokračování exponentu, které poskytuje méně významné bity exponenta.

Posledních 110 bitů je významným pokračovacím polem, které se skládá z jedenácti 10bitových deklinací . Každá deklinace kóduje tři desetinná místa pomocí kódování DPD.

Pokud jsou první dva bity po bitu znaménka „00“, „01“ nebo „10“, jsou to úvodní bity exponenta a tři bity po něm jsou interpretovány jako úvodní desetinná číslice (0 až 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]

Pokud jsou první dva bity po bitu znaménka „11“, pak druhé dva bity jsou úvodní bity exponenta a poslední bit má předponu „100“, aby vytvořil počáteční desetinnou číslici (8 nebo 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]

Zbývající dvě kombinace (11110 a 11111) 5bitového pole se používají k reprezentaci ± nekonečna, respektive NaNs.

Překódování DPD / 3BCD pro deklety je uvedeno v následující tabulce. b9 ... b0 jsou bity DPD a d2 ... d0 jsou tři číslice BCD.

Hustě zabalená pravidla pro desítkové kódování
Hodnota kódovaná DPD Desetinná čísla
Kódový prostor (1024 států) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Zakódované hodnoty Popis Výskyty (1 000 států)
50,0% (512 států) A b C d E F 0 G h i 0 abc 0 def 0 ghi (0–7) (0–7) (0–7) Tři malé číslice 51,2% (512 států)
37,5% (384 států) A b C d E F 1 0 0 i 0 abc 0 def 100 i (0–7) (0–7) (8–9) Dvě malé číslice,
jedna velká
38,4% (384 států)
A b C G h F 1 0 1 i 0 abc 100 f 0 ghi (0–7) (8–9) (0–7)
G h C d E F 1 1 0 i 100 c 0 def 0 ghi (8–9) (0–7) (0–7)
9,375% (96 států) G h C 0 0 F 1 1 1 i 100 c 100 f 0 ghi (8–9) (8–9) (0–7) Jedna malá číslice,
dvě velká
9,6% (96 států)
d E C 0 1 F 1 1 1 i 100 c 0 def 100 i (8–9) (0–7) (8–9)
A b C 1 0 F 1 1 1 i 0 abc 100 f 100 i (0–7) (8–9) (8–9)
3,125% (32 států, 8 použitých) X X C 1 1 F 1 1 1 i 100 c 100 f 100 i (8–9) (8–9) (8–9) Tři velké číslice, bity b9 a b8 , to je jedno 0,8% (8 států)

8 desetinných hodnot, jejichž číslice jsou všechny 8s nebo 9s, má každá čtyři kódování. Bity označené x v tabulce výše jsou při vstupu ignorovány , ale ve vypočítaných výsledcích budou vždy 0. (Nestandardní kódování 8 × 3 = 24 vyplňuje mezeru mezi 10 3  = 1 000 a 2 10  = 1024.)

Ve výše uvedených případech, se skutečným významem jako dekódovanou posloupností desetinných míst, je představovaná hodnota

Viz také

Reference