Microsoft binární formát - Microsoft Binary Format

Ve výpočtu , Microsoft binární formát (MBF) je formát pro plovoucí desetinnou čárkou čísla, která byla použita v této společnosti ‚s BASIC jazykových produktů, včetně MBASIC , GW-BASIC a QuickBASIC před verze 4.00.

Existují dvě hlavní verze formátu. Původní verze byla navržena pro systémy s omezenou pamětí a uložená čísla ve 32 bitech (4 bajty), s 23bitovou mantisou , 1bitovým znaménkem a 8bitovým exponentem . Rozšířený (12k) BASIC zahrnoval typ s dvojitou přesností se 64 bity.

V době, kdy byl portován z platformy Intel 8080 na procesor MOS 6502 , se počítače začaly dodávat s více pamětí jako standardní funkcí. Tato verze byla nabízena s původním 32bitovým formátem nebo volitelně rozšířeným 40bitovým (5bajtovým) formátem. 40bitový formát používala většina domácích počítačů 70. a 80. let minulého století. Tyto dvě verze jsou někdy známé jako „6místné“ a „9místné“.

Na počítačích s procesorem x86 QuickBASIC před verzí 4 znovu zavedl formát s dvojitou přesností pomocí 55bitové mantisy v 64bitovém (8bajtovém) formátu. MBF byl opuštěn při přechodu na QuickBASIC 4, který používal standardní formát IEEE 754 , zavedený před několika lety.

Dějiny

Bill Gates a Paul Allen pracovali na Altair BASIC v roce 1975. Vyvíjeli software na Harvardské univerzitě na DEC PDP-10 s emulátorem Altair . Jedna věc, která jim chyběla, byl kód pro zpracování čísel s plovoucí desetinnou čárkou, vyžadovaných pro podporu výpočtů s velmi velkými a velmi malými čísly, což by bylo zvláště užitečné pro vědu a techniku. Jedním z navrhovaných použití Altairu byla vědecká kalkulačka.

Přední panel Altair 8800

Při večeři v Currier House , vysokoškoláckém obytném domě na Harvardu, si Gates a Allen stěžovali svým společníkům na večeři, že musí napsat tento kód, a jeden z nich, Monte Davidoff , jim řekl, že předtím napsal rutiny s plovoucí desetinnou čárkou a přesvědčil je Gates a Allen, že byl schopen napsat kód Altair BASIC s plovoucí desetinnou čárkou. V době, kdy IBM představila své vlastní programy, neexistoval žádný standard pro čísla s plovoucí desetinnou čárkou, takže Davidoff musel přijít s vlastním. Rozhodl se, že 32 bitů umožní dostatečný rozsah a přesnost. Když to měl Allen předvést MITS , bylo to poprvé, co běžel na skutečném Altairu. Ale fungovalo to, a když zadal 'PRINT 2+2', Davidoffova rutina přidávání dala správnou odpověď.

Předpokládalo se, že zdrojový kód pro Altair BASIC byl ztracen v historii, ale znovu se objevil v roce 2000. Seděl za Gatesovým bývalým učitelem a spisovou skříní děkana Harryho Lewise , který jej znovu objevil. Komentář ve zdroji připisuje Davidoffovi jako autorovi matematického balíčku Altaira BASICA.

Radio Shack Tandy TRS-80 Model I System

Altair BASIC vzlétl a brzy většina raných domácích počítačů používala nějakou formu Microsoft BASIC. Port BASIC pro procesor 6502 , jaký se používá v Commodore PET , zabíral více místa kvůli nižší hustotě kódu 6502. Z tohoto důvodu by se pravděpodobně nevešel do jednoho čipu ROM spolu se vstupem specifickým pro stroj a výstupní kód. Protože byl nutný další čip, bylo k dispozici více místa, a to bylo částečně použito k rozšíření formátu s plovoucí desetinnou čárkou z 32 na 40 bitů. Tento rozšířený formát neposkytoval pouze Commodore BASIC 1 & 2, ale byl také podporován Applesoft BASIC I & II od verze 1.1 (1977), KIM-1 BASIC od verze 1.1a (1977) a MicroTAN BASIC od verze 2b ( 1980). Nedlouho poté porty Z80 , jako je úroveň II BASIC pro TRS-80 (1978), představily 64bitový formát s dvojitou přesností jako samostatný datový typ od 32bitového s jednoduchou přesností. Společnost Microsoft použila při implementaci Fortranu a svého makra assembleru MASM stejné formáty s plovoucí desetinnou čárkou , přestože jejich tabulkový procesor Multiplan a jejich implementace COBOL používaly desetinnou čárku s binárně kódovanou desetinnou čárkou (BCD). Přesto se MBF na nějakou dobu stalo de facto formátem s plovoucí desetinnou čárkou na domácích počítačích, až do bodu, kdy se lidé stále občas setkávají se staršími soubory a formáty souborů, které jej používají.

Minipočítač VAX-11/780

V paralelním vývoji zahájil Intel vývoj koprocesoru s plovoucí desetinnou čárkou v roce 1976. William Morton Kahan jako konzultant společnosti Intel navrhl, aby Intel použil plovoucí desetinnou čárku VAX společnosti Digital Equipment Corporation (DEC). První VAX, VAX-11/780 , právě vyšel na konci roku 1977 a jeho plovoucí bod byl vysoce ceněn. Formáty VAX s plovoucí desetinnou čárkou se od MBF lišily pouze tím, že měly znaménko v nejvýznamnějším bitu. Ve snaze prodat svůj čip na co nejširším trhu byl Kahan požádán, aby vypracoval specifikace. Když se ke svým konkurentům dostaly zvěsti o novém čipu společnosti Intel, zahájili snahu o standardizaci nazvanou IEEE 754 , aby zabránili společnosti Intel získat příliš mnoho místa. Jelikož 8bitový exponent nebyl dostatečně široký pro některé operace požadované pro čísla s dvojitou přesností, např. Pro uložení produktu dvou 32bitových čísel, návrh Intelu a protinávrh od DEC použili 11 bitů, jako časově testovaný 60-bit formátu s plovoucí desetinnou čárkou z CDC 6600 z roku 1965. návrh Kahan je také stanoveno nekonečna, které jsou užitečné, pokud se jedná o dělení nulou podmínek; hodnoty nečísla, které jsou užitečné při řešení neplatných operací; denormální čísla , která pomáhají zmírňovat problémy způsobené podtečením; a lépe vyvážený exponent zaujatost , která by mohla pomoci vyhnout se přetečení a podtečení při převrácení čísla.

V době, kdy byl vydán QuickBASIC 4.00 , se standard IEEE 754 stal široce přijat - například byl začleněn do koprocesoru Intel 387 a každého procesoru x86 od 486 . QuickBASIC verze 4.0 a 4.5 ve výchozím nastavení používají proměnné s plovoucí desetinnou čárkou IEEE 754, ale (alespoň ve verzi 4.5) existuje možnost příkazového řádku /MBF pro IDE a kompilátor, který přepíná z čísel s plovoucí desetinnou čárkou IEEE na MBF, aby podpora dříve napsaných programů, které se spoléhají na detaily datových formátů MBF. Visual Basic také používá místo MBF formát IEEE 754.

Technické údaje

Čísla MBF se skládají z 8bitového exponentu báze 2 , znakového bitu (kladná mantisa: s = 0; negativní mantisa: s = 1) a 23-, 31- nebo 55bitové mantisy významu . Vlevo od explicitní mantisy je vždy implikován 1bit a bod radixu se nachází před tímto předpokládaným bitem . Exponent je kódován s předpětím o 128 , takže exponenty -127 ... -1 jsou reprezentovány x = 1 ... 127 (01h ... 7Fh) , exponenty 0 ... 127 jsou reprezentovány x = 128 ... 255 (80 h ... FFH) , se zvláštním případem pro x = 0 (00h) představujícím celé číslo jako nula.

Formát MBF s dvojitou přesností poskytuje menší měřítko než formát IEEE 754 , a přestože samotný formát poskytuje téměř jednu další desetinnou číslici přesnosti, v praxi jsou uložené hodnoty méně přesné, protože výpočty IEEE používají 80bitové mezivýsledky a MBF nikoli 't. Na rozdíl od IEEE s plovoucí desetinnou čárkou MBF nepodporuje denormální čísla , nekonečna ani NaN .

Jednosměrný formát MBF (32 bitů, „6místný BASIC“):

Exponent Podepsat Významné
8 bitů,
bit 31–24
1 bit,
bit 23
23 bitů,
bit 22–0
xxxxxxxx s mmmmmmmmmmmmmmmmmmmmmmmmm

Formát s rozšířenou přesností MBF (40 bitů, „9místný BASIC“):

Exponent Podepsat Významné
8 bitů,
bit 39–32
1 bit,
bit 31
31 bitů,
bit 30–0
xxxxxxxx s mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

Formát MBF s dvojitou přesností (64 bitů):

Exponent Podepsat Významné
8 bitů,
bit 63–56
1 bit,
bit 55
55 bitů,
bit 54–0
xxxxxxxx s mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

Příklady

  • "10":
32bitový formát: 84h, 20h, 00h, 00h
40bitový formát: 84h, 20h, 00h, 00h, 00h
  • "2":
32bitový formát: 82h, 00h, 00h, 00h
40bitový formát: 82h, 00h, 00h, 00h, 00h
  • "1":
32bitový formát: 81h, 00h, 00h, 00h
40bitový formát: 81h, 00h, 00h, 00h, 00h
  • "0":
32bitový formát: 00h, 00h, 00h, 00h (nebo 00h, xxh, xxh, xxh)
40bitový formát: 00h, 00h, 00h, 00h, 00h (nebo 00h, xxh, xxh, xxh, xxh)
  • "0,5":
32bitový formát: 80h, 00h, 00h, 00h
40bitový formát: 80h, 00h, 00h, 00h, 00h
  • "0,25":
32bitový formát: 7Fh, 00h, 00h, 00h
40bitový formát: 7Fh, 00h, 00h, 00h, 00h
  • "-0,5":
32bitový formát: 80h, 80h, 00h, 00h
40bitový formát: 80h, 80h, 00h, 00h, 00h
  • "sqrt (0,5)":
32bitový formát: 80h, 35h, 04h, F3h
40bitový formát: 80h, 35h, 04h, F3h, 34h
  • "sqrt (2)":
32bitový formát: 81h, 35h, 04h, F3h
40bitový formát: 81h, 35h, 04h, F3h, 34h
  • "ln (2)":
32bitový formát: 80h, 31h, 72h, 18h
40bitový formát: 80h, 31h, 72h, 17h, F8h
  • "log 2 (e)":
32bitový formát: 81h, 38h, AAh, 3Bh
40bitový formát: 81h, 38h, AAh, 3Bh, 29h
  • "pi/2":
32bitový formát: 81h, 49h, 0Fh, DBh
40bitový formát: 81h, 49h, 0Fh, DAh, A2h
  • "2*pí":
32bitový formát: 83h, 49h, 0Fh, DBh
40bitový formát: 83h, 49h, 0Fh, DAh, A2h

Viz také

Reference

externí odkazy

  • Společnost Microsoft poskytuje dynamickou knihovnu odkazů pro 16bitové funkce jazyka Visual Basic obsahující převody mezi daty MBF a IEEE 754.
    • Tato knihovna obaluje funkce převodu MBF v 16bitovém CRT Visual C (++).
    • Tyto funkce převodu zaokrouhlí číslo IEEE s dvojitou přesností, jako je ¾ ⋅ 2 −128 na nulu, a nikoli na 2 −128 .
    • Vůbec nepodporují denormály : číslo IEEE nebo MBF s jednoduchou přesností číslo 2 −128 bude převedeno na nulu, přestože je reprezentovatelné v obou formátech.
    • Tato knihovna je určena pouze pro použití s ​​Visual Basic; Očekává se, že programy C (++) budou volat funkce CRT přímo.