Šestnáctková IBM s plovoucí desetinnou čárkou - IBM hexadecimal floating-point

Hexadecimální s pohyblivou řádovou čárkou (nyní nazvaný HFP od IBM ) je formát pro kódování čísel s plovoucí desetinnou čárkou poprvé představen na IBM System / 360 počítače a podporovány na následujících strojích založených na této architektuře, stejně jako stroje, které byly určeny jako aplikačně kompatibilní s System/360.

Ve srovnání s IEEE 754 s plovoucí desetinnou čárkou má formát HFP delší význam a kratší exponent . Všechny formáty HFP mají 7 bitů exponentu se zkreslením 64. Normalizovaný rozsah reprezentovatelných čísel je od 16 −65 do 16 63 (přibližně 5,39761 × 10 −79 až 7,237005 × 10 75 ).

Číslo je reprezentováno následujícím vzorcem: (−1) znaménko × 0. význam × 16 exponent − 64 .

Jednopřesná 32bitová verze

Jednoduchou přesností číslo HFP (nazvaný „krátký“ IBM) je uloženo v 32-bitového slova:

1 7 24 (šířka v bitech)
S Exp Zlomek  
31 30 ... 24 23 ... 0 (bitový index) *
* Dokumentace IBM čísluje bity zleva doprava, takže nejvýznamnější bit je označen jako bit číslo 0.

V tomto formátu není počáteční bit potlačen a radixový (hexadecimální) bod je nastaven vlevo od významu (zlomek v dokumentaci IBM a obrázcích).

Protože základna je 16, exponent v této formě je asi dvakrát větší než ekvivalent v IEEE 754, aby měl podobný rozsah exponentů v binárním režimu, bylo by zapotřebí 9 exponentních bitů.

Příklad

Zvažte kódování hodnoty −118,625 jako hodnoty s plovoucí desetinnou čárkou s jednoduchou přesností HFP.

Hodnota je záporná, takže znaménkový bit je 1.

Hodnota 118,625 10 v binárním formátu je 1110110.101 2 . Tato hodnota je normalizována přesunutím bodu radixu o čtyři bity doleva (jedna hexadecimální číslice) najednou, dokud není číslice úplně vlevo nula, čímž se získá 0,01110110101 2 . Zbývající číslice úplně vpravo jsou vyplněny nulami, čímž se získá 24bitový zlomek 0,0111 0110 1010 0000 0000 0000 2 .

Normalizovaná hodnota posunula radixový bod o dvě hexadecimální číslice doleva, čímž se získal multiplikátor a exponent 16 +2 . K exponentu (+2) se přidá zkreslení +64, čímž se získá +66, což je 100 0010 2 .

Kombinací znaménka, exponentu plus zkreslení a normalizovaného zlomku vznikne toto kódování:

S Exp Zlomek  
1 100 0010 0111 0110 1010 0000 0000 0000  

Jinými slovy, počet zastoupených -0.76A000 16 x 16 66 - 64 = -0,4633789 ... × 16 + 2 = -118,625

Největší reprezentativní číslo

S Exp Zlomek  
0 111 1111 1111 1111 1111 1111 1111 1111  

Zastoupený počet je +0.FFFFFF 16 × 16127 - 64 = (1 - 16 −6 ) × 16 63 ≈ +7,2370051 × 10 75

Nejmenší kladné normalizované číslo

S Exp Zlomek  
0 000 0000 0001 0000 0000 0000 0000 0000  

Číslo zastoupeny, 0,1 16 x 16 0-64 = 16 -1 x 16 -64 ≈ 5,397605 x 10 -79 .

Nula

S Exp Zlomek  
0 000 0000 0000 0000 0000 0000 0000 0000  

Nula (0.0) je reprezentován v normalizovaném tvaru jako všechny nulových bitů, který je matematicky hodnota 0,0 16 x 16 0-64 = 0 x 16 -64 ≈ 0,000000 x 10 -79 = 0. Vzhledem k tomu, zlomek all- bity nula, jakákoli kombinace bitu kladného nebo záporného znaménka a nenulového zkresleného exponentu přinese hodnotu aritmeticky rovnou nule. Normalizovaná forma generovaná pro nulu hardwarem CPU je však celá bitová nula. To platí pro všechny tři přesné formáty s plovoucí desetinnou čárkou. Sčítání nebo odčítání s jinými hodnotami exponentu může ve výsledku ztratit přesnost.

Problémy s přesností

Protože základna je 16, mohou být v binárním významu až tři úvodní nulové bity. To znamená, že když je číslo převedeno na binární, může existovat až 21 bitů přesnosti. Kvůli efektu „kolísavé přesnosti“ to může způsobit, že některé výpočty budou velmi nepřesné. To způsobilo značnou kritiku

Dobrým příkladem nepřesnosti je vyjádření desetinné hodnoty 0,1. Nemá přesnou binární ani hexadecimální reprezentaci. V hexadecimálním formátu je reprezentován jako 0,19999999 ... 16 nebo 0,0001 1001 1001 1001 1001 1001 1001 1001 ... 2 , to znamená:

S Exp Zlomek  
0 100 000 0001 1001 1001 1001 1001 1010  

To má pouze 21 bitů, zatímco binární verze má 24 bitů přesnosti.

Šest hexadecimálních číslic přesnosti je zhruba ekvivalentních šesti desetinným číslicím (tj. (6 - 1) log 10 (16) ≈ 6,02). Konverze hexadecimální float s jednoduchou přesností na desítkový řetězec by vyžadovala alespoň 9 platných číslic (tj. 6 log 10 (16) + 1 ≈ 8,22), aby bylo možné převést zpět na stejnou hexadecimální plovoucí hodnotu.

64bitová s dvojitou přesností

S dvojitou přesností formát HFP (nazvaný „dlouhá“ IBM), je stejný jako „krátké“ formátu, kromě toho, že pole frakce je širší a dvojitou přesností číslo je uloženo v dvojité slovo (8 bytů):

1 7 56 (šířka v bitech)
S Exp Zlomek  
63 62 ... 56 55 ... 0 (bitový index) *
* Dokumentace IBM čísluje bity zleva doprava, takže nejvýznamnější bit je označen jako bit číslo 0.

Exponent pro tento formát pokrývá pouze asi čtvrtinu rozsahu jako odpovídající binární formát IEEE.

14 hexadecimálních číslic s přesností odpovídá zhruba 17 desetinným číslicím. Konverze hexadecimálního floatu s dvojitou přesností na desítkový řetězec by vyžadovala alespoň 18 platných číslic, aby bylo možné převést zpět na stejnou hexadecimální hodnotu float.

128bitová rozšířená přesnost

Říká se společností IBM s prodlouženou přesností, do řady System/370 byl přidán formát HFP se čtyřnásobnou přesností a byl k dispozici u některých modelů S/360 (S/360-85, -195 a dalších na zvláštní požadavek nebo simulován softwarem OS) ). Pole zlomků s prodlouženou přesností je širší a číslo s rozšířenou přesností je uloženo jako dvě dvojitá slova (16 bajtů):

Část vysokého řádu
1 7 56 (šířka v bitech)
S Exp Frakce (14 číslic vyššího řádu)  
127 126 ... 120 119 ... 64 (bitový index) *
Díl nízkého řádu
8 56 (šířka v bitech)
Nepoužitý Frakce (14 číslic nižšího řádu)  
63 ... 56 55 ... 0 (bitový index) *
* Dokumentace IBM čísluje bity zleva doprava, takže nejvýznamnější bit je označen jako bit číslo 0.

28 hexadecimálních číslic s přesností odpovídá zhruba 32 desetinným číslicím. Konverze rozšířené přesnosti HFP na desítkový řetězec by vyžadovala alespoň 35 platných číslic, aby bylo možné převést zpět na stejnou hodnotu HFP. Uložený exponent v části nižšího řádu je o 14 menší než část vyššího řádu, pokud by to nebylo menší než nula.

Aritmetické operace

Dostupné aritmetické operace se sčítají a odčítají, normalizované i nenormalizované, a porovnávají. Prenormalizace se provádí na základě rozdílu exponentů. Znásobte a rozdělte nenormalizované hodnoty a dělejte výsledek po jedné ochranné číslici. Operace na polovinu zjednodušuje dělení dvěma. Počínaje verzí ESA/390 existuje odmocnina. Všechny operace mají jednu hexadecimální ochrannou číslici, aby se předešlo ztrátě přesnosti. Většina aritmetických operací zkracuje jako jednoduché kapesní kalkulačky. Proto 1 - 16 −8 = 1. V tomto případě se výsledek zaokrouhlí směrem od nuly.

IEEE 754 na sálových počítačích IBM

Počínaje modelem S/390 G5 v roce 1998 obsahují sálové počítače IBM také binární jednotky IEEE s plovoucí desetinnou čárkou, které odpovídají standardu IEEE 754 pro aritmetiku s pohyblivou řádovou čárkou . IEEE s desetinnou čárkou byl přidán do IBM System z9 GA2 v roce 2007 pomocí milicode a v roce 2008 do IBM System z10 v hardwaru.

Moderní mainframy IBM podporují tři radice s plovoucí desetinnou čárkou se 3 hexadecimálními (HFP) formáty, 3 binárními (BFP) formáty a 3 desítkovými (DFP) formáty. Na jádro jsou dvě jednotky s plovoucí desetinnou čárkou; jeden podporující HFP a BFP a jeden podporující DFP; existuje jeden soubor registru, FPR, který obsahuje všechny 3 formáty. Počínaje z13 v roce 2015 přidaly procesory vektorové zařízení, které obsahuje 32 vektorových registrů, každý o šířce 128 bitů; vektorový registr může obsahovat dvě 64bitová nebo čtyři 32bitová čísla s plovoucí desetinnou čárkou. Na nových vektorových registrech je překryto tradičních 16 registrů s plovoucí desetinnou čárkou, takže s některými daty lze manipulovat s tradičními instrukcemi s plovoucí desetinnou čárkou nebo s novějšími vektorovými instrukcemi.

Speciální použití

Formát IBM HFP se používá v:

Jelikož je IBM jediným zbývajícím poskytovatelem hardwaru používajícího formát HFP a jako jediné počítače IBM, které tento formát podporují, jsou jejich mainframy, vyžaduje to několik formátů souborů. Jedinou výjimkou je formát souboru SAS 5 Transport, který FDA vyžaduje; v tomto formátu „Všechna čísla s plovoucí desetinnou čárkou v souboru jsou uložena pomocí reprezentace sálového počítače IBM. [...] Většina platforem používá pro čísla s plovoucí desetinnou čárkou reprezentaci IEEE. [...] Aby vám pomohla při čtení a/ nebo při psaní transportních souborů, poskytujeme rutiny pro převod z reprezentace IEEE (buď velký endian, nebo malý endian) na transportní reprezentaci a zpět. " Kód pro formát IBM je také k dispozici pod LGPLv2.1 .

Systémy, které používají formát IBM s plovoucí desetinnou čárkou

Viz také

Reference

Další čtení