formát desetinné čárky s desetinnou čárkou - decimal32 floating-point format

Při práci na počítači je decimal32 formát číslování počítače s desetinnou čárkou, který zabírá 4 bajty (32 bitů) v paměti počítače. Je určen pro aplikace, kde je nutné přesně emulovat desetinné zaokrouhlení, například finanční a daňové výpočty. Stejně jako formát binary16 je určen pro ukládání šetřící paměť.

Decimal32 podporuje 7 desítkových číslic s významem a rozsahem exponentů −95 až +96, tj. ± 0,000 000 × 10 −95^ až ± 9,999 999 × 10 96^ . (Ekvivalentně ± 0 000 001 × 10 −101^± 9 999 999 × 10 90.^ ) Protože význam není normalizován (neexistuje implicitní úvodní „1“), většina hodnot s méně než 7 platnými číslicemi má více možných reprezentací ; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 atd. Nula má 192 možných zobrazení (384, když jsou zahrnuty obě podepsané nuly ).

Decimal32 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 hodnot decimal32

Obecné kódování
Podepsat Kombinace Koncové pole významů
1 bit 11 bitů 20 bitů
s ggggggggggg tttttttttttttttttttt

IEEE 754 umožňuje dvě alternativní metody reprezentace pro hodnoty decimal32. Norma neurčuje, jak označit, která reprezentace se používá, například v situaci, kdy jsou mezi systémy sdělovány hodnoty decimal32.

V jedné metodě reprezentace, založené na binárním celočíselném desetinné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é desítkové soustavě (DPD) pro většinu významů (kromě nejvýznamnější číslice).

Obě alternativy poskytují přesně stejný rozsah reprezentovatelných čísel: 7 číslic významu a 3 × 2 6 = 192 možných hodnot exponentu.

V obou kódováních jsou BID a DPD, 2 nejvýznamnější exponentové bity a 4 nejvýznamnější bity významu, kombinovány do 5 bitů. Poloha 5 bitů v kombinačním poli se liší, ale jinak je kódování identické. Místo 6 stačí 5 bitů, protože 2 MSB od exponentu kódují pouze hodnoty od 0 do 2 (3 možné hodnoty) a 4 MSB významu představují desetinnou číslici mezi 0 a 9 (10 možných hodnot). Celkem máme 3*10 = 30 možných hodnot při kombinaci v jednom kódování, které je reprezentovatelné v 5 bitech (2^5 = 32).

BID kódování kombinačního pole
Kombinační pole MSB z LSB
Exponent
Popis
g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0 Exponent Významné
0 0 d E F G h A b C 00 0 abc defghi Konečný počet
plný binární význam = 0 abc tttttttttttttttttttttt
0 1 01
1 0 10
1 1 0 0 d E F G h C 00 100 c Konečný počet
plný binární význam = 100 c tttttttttttttttttttttt
1 1 0 1 01
1 1 1 0 10
1 1 1 1 0 ± Nekonečno
1 1 1 1 1 NaN (s užitečným zatížením ve významu)
DPD kódování kombinačního pole
Kombinační pole MSB z LSB
Exponent
Významná
desetinná číslice
Popis
g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0 Exponent Významné
0 0 A b C d E F G h 00 0 abc defghi 4*a + 2*b + c Konečné číslo s
0 1 01
1 0 10
1 1 0 0 C 00 100 c 8 + c Konečné číslo s
1 1 0 1 01
1 1 1 0 10
1 1 1 1 0 ± Nekonečno
1 1 1 1 1 NaN (s užitečným zatížením ve významu)

Pro kódování BID je úplný binární význam získán připojením bitů z pole s koncovým významem do MSB významů, jak je uvedeno v tabulce BID výše. Výsledný význam je kladné binární celé číslo 24 bitů, které musí být opakovaně děleno 10, aby se získaly jednotlivé desetinné číslice.

Pro kódování DPD výše uvedená tabulka DPD ukazuje, jak získat úvodní desítkovou číslici významu z MSB významů. Aby se získaly koncové desítkové číslice, musí být toto koncové pole dekódováno podle pravidel DPD (viz níže). Plný desetinný význam se pak získá zřetězením úvodních a koncových desetinných číslic.

Pro ± nekonečno jsou kromě znaménkového bitu ignorovány všechny zbývající bity (tj. Pole exponent i signál nemají žádný účinek). Pro NaN znakový bit nemá ve standardu žádný význam a je ignorován. Proto jsou podepsané a nepodepsané NaN ekvivalentní, přestože některé programy budou zobrazovat NaN jako podepsané. Bit g5 určuje, zda je NaN tichý (0) nebo signalizující (1). Bity významu jsou užitečné zatížení NaN a mohou obsahovat uživatelsky definovaná data (např. Pro rozlišení, jak byly NaN generovány). Stejně jako u normálních významů může být užitečné zatížení NaN buď v kódování BID nebo DPD.

Pole s významem binárních celých čísel

Tento formát používá binární význam od 0 do 10 7  - 1 = 9 999 999  = 98967F 16  = 1001 1000100101 1001111111 2 . Kódování může představovat binární significands až 10 x 2 20  - 1 = 10 485 759  = 9FFFFF 16  = 1001 1111111111 1111111111 2 , ale hodnoty větší než 10 7  - 1, jsou nezákonné (a standardní vyžaduje implementace s nimi zacházet jako 0, v případě, na vstupu).

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

Pokud jsou 2 bity za znaménkovým bitem „00“, „01“ nebo „10“, pak pole exponent sestává z 8 bitů následujících za znaménkovým bitem a význam je zbývajících 23 bitů s implicitní úvodní 0 bit:

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

To zahrnuje subnormální čísla, kde počáteční významná číslice je 0.

Pokud jsou 2 bity za znaménkovým bitem „11“, pak se 8bitové pole exponentu posune o 2 bity doprava (po bitovém znaménku i poté po „11“ bitech) a reprezentovaný význam je ve zbývajícím 21 bitů. V tomto případě existuje implicitní (tj. Není uložena) úvodní 3bitová sekvence „100“ ve skutečném významu.

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

2bitová sekvence „11“ za znaménkovým bitem indikuje, že k významu je implicitní 3bitová předpona „100“. Porovnejte s implicitní 1 v významu normálních hodnot pro binární formáty. Bity „00“, „01“ nebo „10“ jsou součástí pole exponent.

Hlavními bitů mantisy pole se nebude kódovat nejvýznamnější desítkovou číslici; jsou prostě součástí většího čistě binárního čísla. Například význam 8 000 000 je kódován jako binární 0111 1010000100 1000000000 , přičemž přední 4 bity kódují 7; první význam, který vyžaduje 24. bit, je 2 23  = 8 388 608

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

(−1) znaménko  × 10 exponent − 101  × významný

Pokud jsou čtyři bity za znaménkovým bitem „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é pole

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

Úvodní 2 bity exponentu a úvodní číslice (3 nebo 4 bity) významu jsou sloučeny do pěti bitů, které následují za znaménkovým bitem.

Těchto šest bitů je pole exponentu pokračování a poskytuje méně významné bity exponentu.

Posledních 20 bitů je významným pokračovacím polem, které se skládá ze dvou 10bitových decletů . Každý declet kóduje tři desetinná místa pomocí kódování DPD.

Pokud jsou první dva bity za znaménkovým bitem „00“, „01“ nebo „10“, pak se jedná o úvodní bity exponentu a tři následující bity jsou interpretovány jako počáteční desetinná číslice (0 až 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]

Pokud jsou první dva bity za znaménkovým bitem „11“, pak druhé dva bity jsou úvodními bity exponentu a poslední bit má předponu „100“, aby se vytvořila úvodní desetinná číslice (8 nebo 9):

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

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

Překódování DPD/3BCD pro declety je dáno následující tabulkou. b9 ... b0 jsou bity DPD a d2 ... d0 jsou tři číslice BCD.

Hustě zabalená pravidla pro dekadické kódování
Hodnota kódovaná DPD Desetinné číslice
Prostor kódu (1024 států) b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Kódované hodnoty Popis Výskyty (1000 států)
50,0% (512 států) A b C d E F 0 G h 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 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 0 abc 100 f 0 ghi (0–7) (8–9) (0–7)
G h C d E F 1 1 0 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 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 100 c 0 def 100 i (8–9) (0–7) (8–9)
A b C 1 0 F 1 1 1 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 100 c 100 f 100 i (8–9) (8–9) (8–9) Tři velké číslice, bity b9 a b8, je to jedno 0,8% (8 států)

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

Ve výše uvedených případech se skutečným významem dekódované sekvence desetinných číslic představuje reprezentovaná hodnota

Reference