desetinný formát s plovoucí desetinnou čárkou - decimal128 floating-point format
Formáty s plovoucí desetinnou čárkou |
---|
IEEE 754 |
jiný |
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 až ± 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 až ± 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.
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é
- ISO / IEC 10967 , jazykově nezávislá aritmetika
- Primitivní datový typ