IBM hexadecimální plovoucí desetinná čárka - IBM hexadecimal floating point
Hexadecimální plovoucí bod (nyní volal HFP podle IBM) je formát pro kódování čísel s plovoucí desetinnou čárkou poprvé zavedený na IBM Systém / 360 počítače a podporovány na následujících počítačích založených na této architektuře,[1][2][3] stejně jako stroje, které měly být kompatibilní s aplikacemi se System / 360.[4][5]
Ve srovnání s IEEE 754 s plovoucí desetinnou čárkou, formát HFP má delší významně a kratší exponent. Všechny formáty HFP mají 7 bitů exponentu s a zaujatost z 64. Normalizovaný rozsah reprezentovatelných čísel je od 16−65 do 1663 (přibližně 5,39761 × 10−79 na 7,237005 × 1075).
Číslo je reprezentováno následujícím vzorcem: (−1)podepsat × 0.významně × 16exponent −64.
Jedna přesnost 32 bitů
A jednoduchá přesnost Číslo HFP (IBM jej nazývá „krátké“) je uloženo ve 32bitovém slově:
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 Theradix (hexadecimální) bod je nastaven nalevo od významu (zlomek v dokumentaci IBM a obrázcích).
Vzhledem k tomu, že základna je 16, je exponent v této formě přibližně dvakrát větší než ekvivalent v IEEE 754, aby měl podobný rozsah exponentů v binárním formátu, bylo by zapotřebí 9 exponentových bitů.
Příklad
Zvažte kódování hodnoty −118 625 jako hodnoty plovoucí desetinné čárky s jednoduchou přesností HFP.
Hodnota je záporná, takže znaménkový bit je 1.
Hodnota 118,62510 v binárním formátu je 1110110.1012. Tato hodnota se normalizuje přesunutím bodu radix vlevo o čtyři bity (jedna hexadecimální číslice), dokud není číslice nejvíce vlevo nulová, čímž se získá 0,011101101012. Zbývající číslice zcela vpravo jsou vyplněny nulami, čímž se získá 24bitový zlomek 0,1111 0110 1010 0000 0000 00002.
Normalizovaná hodnota posunula radixový bod o dvě hexadecimální číslice doleva, čímž se získá multiplikátor a exponent 16+2. Předpětí +64 se přidá k exponentu (+2), čímž se získá +66, což je 100 00102.
Kombinace znaménka, exponentu plus zkreslení a normalizovaného zlomku vytváří toto kódování:
S Exp Zlomek 1 100 0010 0111 0110 1010 0000 0000 0000
Jinými slovy, zastoupené číslo je −0,76A00016 × 1666 − 64 = −0.4633789… × 16+2 = −118.625
Největší reprezentovatelné číslo
S Exp Zlomek 0 111 1111 1111 1111 1111 1111 1111 1111
Zastoupené číslo je + 0.FFFFFF16 × 16127 − 64 = (1 − 16−6) × 1663 ≈ +7.2370051 × 1075
Nejmenší kladné normalizované číslo
S Exp Zlomek 0 000 0000 0001 0000 0000 0000 0000 0000
Zastoupený počet je +0,116 × 160 − 64 = 16−1 × 16−64 ≈ +5.397605 × 10−79.
Nula
S Exp Zlomek 0 000 0000 0000 0000 0000 0000 0000 0000
Nula (0,0) je reprezentována v normalizované formě jako všechny nulové bity, což je aritmeticky hodnota +0,016 × 160 − 64 = +0 × 16−64 ≈ +0.000000 × 10−79 = 0. Vzhledem k tomu, že zlomek všech bitů je nula, jakákoli kombinace bitů kladného nebo záporného znaménka a exponent s předpětím s nenulovou hodnotou přinese hodnotu aritmeticky rovnou nule. Normalizovaná forma vygenerovaná pro nulu hardwarem CPU je však nula všech bitů. To platí pro všechny tři formáty přesnosti s plovoucí desetinnou čárkou. Sčítání nebo odčítání s jinými hodnotami exponentů může ve výsledku ztratit přesnost.
Problémy s přesností
Vzhledem k tomu, že základna je 16, v binárním významu mohou být 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 „viklání přesnosti“ to může způsobit, že některé výpočty budou velmi nepřesné.
Dobrým příkladem nepřesnosti je vyjádření desetinné hodnoty 0,1. Nemá přesné binární ani hexadecimální zastoupení. V hexadecimálním formátu je reprezentován jako 0,19 999 999 ...16 nebo 0,0001 1001 1001 1001 1001 1001 1001 ...2, to znamená:
S Exp Zlomek 0 100 0000 0001 1001 1001 1001 1001 1010
To má pouze 21 bitů, zatímco binární verze má přesnost 24 bitů.
Šest hexadecimálních číslic přesnosti je zhruba ekvivalentní šesti desetinným místům (tj. (6 - 1) log10(16) ≈ 6,02). Převod hexadecimálního desetinného čárkového kódu s přesnou přesností na desítkový řetězec by vyžadoval alespoň 9 platných číslic (tj. 6 log10(16) + 1 ≈ 8,22) za účelem převodu zpět na stejnou hexadecimální float hodnotu.
64bitová verze s dvojitou přesností
The dvojnásobná přesnost Formát HFP (IBM jej nazývá „long“) je stejný jako formát „short“ s tím rozdílem, že pole zlomku je širší a číslo s dvojitou přesností je uloženo ve dvojitém slově (8 bajtů):
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 přibližně čtvrtinu rozsahu jako odpovídající binární formát IEEE.
14 hexadecimálních číslic přesnosti je zhruba ekvivalentní 17 desetinným místům. Převod šestnáctkové float s dvojitou přesností na desítkový řetězec by vyžadoval alespoň 18 platných číslic, aby se mohl převést zpět na stejnou šestnáctkovou float hodnotu.
128bitová rozšířená přesnost
Společnost IBM, a čtyřnásobná přesnost Formát HFP byl přidán do řady System / 370 a byl k dispozici na některých modelech S / 360 (S / 360-85, -195 a dalších na zvláštní žádost nebo simulovaných softwarem OS). Pole zlomku rozšířené přesnosti je širší a číslo s rozšířenou přesností je uloženo jako dvě dvojitá slova (16 bajtů):
Součást vysoké objednávky 1 7 56 (šířka v bitech) S Exp Zlomek (14 číslic vyššího řádu) 127 126 ... 120 119 ... 64 (bitový index)* Díl nízké objednávky 8 56 (šířka v bitech) Nepoužitý Zlomek (14 číslic nízké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 přesnosti je zhruba ekvivalentní 32 desetinným místům. Převod HFP s rozšířenou přesností na desítkový řetězec by vyžadoval alespoň 35 platných číslic, aby se mohl převést zpět na stejnou hodnotu HFP.
Aritmetické operace
Většina aritmetických operací se zkracuje jako jednoduché kapesní kalkulačky. Proto 1-16−7 = 1. V tomto případě je výsledek zaokrouhlen od nuly.[6]
IEEE 754 na sálových počítačích IBM
Počínaje S / 390 G5 v roce 1998,[7] Sálové počítače IBM také zahrnovaly IEEE binární jednotky s plovoucí desetinnou čárkou, které odpovídají Standard IEEE 754 pro aritmetiku s plovoucí desetinnou čárkou. Byla přidána desetinná čárka s plovoucí desetinnou čárkou IEEE IBM System z9 GA2[8] v roce 2007 pomocí milikoda[9] a v roce 2008 do IBM System z10 v hardwaru.[10]
Moderní sálové počítače IBM podporují tři radice s plovoucí desetinnou čárkou se 3 hexadecimálními formáty (HFP), 3 binárními formáty (BFP) a 3 desítkovými formáty (DFP). 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 procesory přidaly vektorové zařízení, které zahrnuje 32 vektorových registrů, každý 128 bitů široký; vektorový registr může obsahovat dvě 64bitová nebo čtyři 32bitová čísla s plovoucí desetinnou čárkou.[11] Tradiční 16 registrů s plovoucí desetinnou čárkou je překryto na nových vektorových registrech, takže s některými daty lze manipulovat pomocí tradičních instrukcí s plovoucí desetinnou čárkou nebo s novějšími vektorovými instrukcemi.
Speciální použití
Formát IBM HFP se používá v:
- SAS 5 Transportní soubory (.XPT) podle požadavků Úřad pro kontrolu potravin a léčiv (FDA) pro podání studie o nových aplikacích na léky (NDA),[12]
- GRIB (GRIdded Binary) datové soubory pro výměnu výstupu modelů předpovědi počasí (IEEE formát s plovoucí desetinnou čárkou s jednou přesností v aktuální verzi),
- GDS II Soubory ve formátu (Graphic Database System II) (OÁZA je náhrada) a
- SEG Y (Society of Exploration Geophysicists Y) format format (IEEE single-precision floating-point was added to the format in 2002).[13]
Protože IBM je jediným zbývajícím poskytovatelem hardwaru (a pouze v jeho sálových počítačích) používajícím formát HFP, žádný populární formát souboru to nevyžaduje; Kromě toho, že FDA vyžaduje formát souboru SAS a „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. [...] pomůžeme vám při čtení a / nebo zápisu transportních souborů, poskytujeme rutiny pro převod z reprezentace IEEE (buď velký endian nebo malý endian) na transportní reprezentaci a zpět. "[12] Kód pro formát IBM je také k dispozici pod LGPLv2.1.[14]
Systémy, které používají formát IBM s plovoucí desetinnou čárkou
- IBM System / 360 a nástupci
- RCA Spectra 70
- Anglický elektrický systém 4
- Řada GEC 4000 minipočítače
- Interdata 16bitové a 32bitové počítače
- Řada SDS Sigma
- Texas Instruments 990 /12
- Obecné údaje minipočítače
Viz také
Reference
- ^ Zásady fungování systému IBM System / 360, IBM Publication A22-6821-6, sedmé vydání (13. ledna 1967), str. 41-50
- ^ Zásady fungování systému IBM System / 370, IBM Publication GA22-7000-4, páté vydání (1. září 1975), str. 157-170
- ^ z / Architektura Principy provozu, IBM Publication SA22-7832-01, druhé vydání (říjen 2001), kapitola 9 a násl.
- ^ Xerox Data Systems (říjen 1973). Počítačová referenční příručka Xerox SIGMA 7 Mnoho. p. 48. Citováno 13. listopadu 2020.
- ^ RCA (březen 1966). Procesory Spectra 70: 35 45 55 (PDF). p. 184. Citováno 13. listopadu 2020.
- ^ Rozšířená podpora plovoucího bodu ESA / 390: Přehled
- ^ Schwarz, E. M .; Krygowski, C. A. (září 1999). "Jednotka s plovoucí desetinnou čárkou S / 390 G5". IBM Journal of Research and Development. 43 (5.6): 707–721. doi:10.1147 / rd.435.0707.
- ^ Duale, A. Y .; Decker, M. H .; Zipperer, H.-G .; Aharoni, M .; Bohizic, T. J. (leden 2007). "Desetinná plovoucí čárka v z9: perspektiva implementace a testování". IBM Journal of Research and Development. 51 (1.2): 217–227. CiteSeerX 10.1.1.123.9055. doi:10.1147 / kolo.511.0217.
- ^ Heller, L. C .; Farrell, M. S. (květen 2004). "Millicode v procesoru IBM zSeries". IBM Journal of Research and Development. 48 (3.4): 425–434. CiteSeerX 10.1.1.641.1164. doi:10.1147 / kolo 483,0425.
- ^ Schwarz, E. M .; Kapernick, J. S .; Cowlishaw, M. F. (leden 2009). "Desetinná podpora s plovoucí desetinnou čárkou v procesoru IBM System z10". IBM Journal of Research and Development. 53 (1): 4:1–4:10. doi:10.1147 / JRD.2009.5388585.
- ^ z / Architektura Principy provozu
- ^ A b "Rozložení záznamu datové sady ve formátu SAS Transport (XPORT)" (PDF). Citováno 18. září 2014.
- ^ http://www.seg.org/documents/10161/77915/seg_y_rev1.pdf
- ^ https://cran.r-project.org/web/packages/SASxport/SASxport.pdf
Další čtení
- Sweeney, D. W. (1965). "Analýza sčítání s plovoucí desetinnou čárkou". IBM Systems Journal. 4 (1): 31–42. doi:10.1147 / sj.41.0031.
- Tomayko, J. (léto 1995). „Problémy s pohyblivou řádovou čárkou System 360“. IEEE Annals of the History of Computing. 17 (2): 62–63. doi:10.1109 / MAHC.1995.10006. ISSN 1058-6180.
- Harding, L. J. (1966), "Idiosyncrasies of System / 360 Floating-Point", Sborník SDÍLENÍ 27, 8. – 12. Srpna 1966, Prezentováno na SHARE XXVII, Toronto, Kanada
- Harding, L. J. (1966), „Modifikace systému / 360 s plovoucí desetinnou čárkou“, SDÍLENÍ distribuce tajemníka, str. 11–27, SSD 157, C4470
- Anderson, Stanley F .; Earle, John G .; Goldschmidt, Robert Elliott; Powers, Don M. (leden 1967). „IBM System / 360 Model 91: Floating-Point Execution Unit“. IBM Journal of Research and Development. 11 (1): 34–53. doi:10.1147 / rd.111.0034.
- Padegs, A. (1968). "Strukturální aspekty systému System / 360 Model 85, III: Rozšíření architektury s plovoucí desetinnou čárkou". IBM Systems Journal. 7 (1): 22–29. doi:10,1147 / sj.71.0022.
- Schwarz, E. M .; Sigal, L .; McPherson, T. J. (červenec 1997). "Jednotka s plovoucí desetinnou čárkou CMOS pro S / 390 Parallel Enterprise Server G4". IBM Journal of Research and Development. 41 (4.5): 475–488. doi:10.1147 / rd.414.0475.