माइक्रोसॉफ्ट बाइनरी फॉर्मेट

कम्प्यूटिंग में, माइक्रोसॉफ्ट बाइनरी फॉर्मेट (एमबीएफ)  तैरनेवाला स्थल  नंबरों के लिए एक प्रारूप है जिसका उपयोग संस्करण 4.00 से पहले एमबीएएसआईसी, GW-[[ बुनियादी ]] और  त्वरित बुनियादी  सहित माइक्रोसॉफ्ट की बेसिक भाषाओं में किया जाता था।

प्रारूप के दो मुख्य संस्करण हैं. मूल संस्करण को मेमोरी-बाधित सिस्टम और 32 बिट्स (4 बाइट्स) में संग्रहीत संख्याओं के लिए डिज़ाइन किया गया था, जिसमें 23-बिट सिग्नेचर, 1-बिट साइन और 8-बिट प्रतिपादक  था। माइक्रोसॉफ्ट_बेसिक#एक्सटेंडेड_बेसिक-80|एक्सटेंडेड (12के) बेसिक में 64 बिट्स के साथ एक डबल-प्रिसिजन प्रकार शामिल है।

उस अवधि के दौरान जब इसे Intel 8080 प्लेटफ़ॉर्म से MOS 6502 प्रोसेसर में पोर्ट किया जा रहा थागृह कम्प्यूटर एक मानक सुविधा के रूप में अधिक मेमोरी के साथ शिप करना शुरू कर रहे थे। यह संस्करण मूल 32-बिट प्रारूप या वैकल्पिक विस्तारित 40-बिट (5-बाइट) प्रारूप के साथ पेश किया गया था। 40-बिट प्रारूप का उपयोग 1970 और 1980 के दशक के अधिकांश घरेलू कंप्यूटरों द्वारा किया जाता था। इन दो संस्करणों को कभी-कभी क्रमशः 6-अंकीय और 9-अंकीय के रूप में जाना जाता है।

x86 प्रोसेसर वाले निजी कंप्यूटर  पर, क्विकबेसिक ने, संस्करण 4 से पहले, 64-बिट (8-बाइट) प्रारूप में 55-बिट मंटिसा का उपयोग करके डबल-प्रिसिजन प्रारूप को फिर से प्रस्तुत किया था। QuickBASIC 4 में स्थानांतरण के दौरान MBF को छोड़ दिया गया था, जो कुछ साल पहले पेश किए गए मानक IEEE 754 प्रारूप का उपयोग करता था।

इतिहास
बिल गेट्स और पॉल एलन 1975 में अल्टेयर बेसिक पर काम कर रहे थे। वे विदेश महाविद्यालय  में डिजिटल उपकरण निगम पीडीपी-10 पर अपना अल्टेयर 8800 एमुलेटर चलाकर सॉफ्टवेयर विकसित कर रहे थे। एक चीज़ की कमी थी उनके पास फ्लोटिंग-पॉइंट संख्याओं को संभालने के लिए कोड था, जो बहुत बड़ी और बहुत छोटी संख्याओं के साथ गणना का समर्थन करने के लिए आवश्यक था, जो विज्ञान और इंजीनियरिंग के लिए विशेष रूप से उपयोगी होगा।  अल्टेयर के प्रस्तावित उपयोगों में से एक वैज्ञानिक कैलकुलेटर के रूप में था।

हार्वर्ड के एक स्नातक आवासीय घर क्यूरियर हाउस (हार्वर्ड कॉलेज) में एक रात्रिभोज में, गेट्स और एलन ने अपने रात्रिभोज साथियों से शिकायत की कि उन्हें यह कोड लिखना होगा और उनमें से एक, मोंटे डेविडॉफ़ ने उन्हें बताया कि उसने पहले फ़्लोटिंग-पॉइंट रूटीन लिखा था और गेट्स और एलन को आश्वस्त किया कि वह अल्टेयर बेसिक फ़्लोटिंग-पॉइंट कोड लिखने में सक्षम था। उस समय, जबकि आईबीएम ने अपने स्वयं के कार्यक्रम पेश किए थे, फ़्लोटिंग-पॉइंट नंबरों के लिए कोई मानक नहीं था, इसलिए डेविडऑफ़ को अपने स्वयं के कार्यक्रम के साथ आना पड़ा। उन्होंने निर्णय लिया कि 32 बिट्स पर्याप्त रेंज और सटीकता की अनुमति देंगे। जब एलन को इसे माइक्रो इंस्ट्रुमेंटेशन और टेलीमेट्री सिस्टम में प्रदर्शित करना था, तो यह पहली बार था जब यह वास्तविक अल्टेयर पर चला। लेकिन यह काम कर गया, और जब उन्होंने 'PRINT 2+2' में प्रवेश किया, तो डेविडऑफ़ के ऐडिंग रूटीन ने सही उत्तर दिया।

अल्टेयर बेसिक के स्रोत कोड की एक प्रति 1999 में फिर से सामने आई। 1970 के दशक के अंत में, गेट्स के पूर्व शिक्षक और डीन हैरी आर. लुईस ने इसे एडेन के एक कार्यालय में कुछ फर्नीचर के पीछे पाया था, और इसे एक फ़ाइल कैबिनेट में रख दिया था। लंबे समय तक इसके अस्तित्व के बारे में कमोबेश भूलने के बाद, लुईस अंततः लॉबी में सूची प्रदर्शित करने का विचार लेकर आए। इसके बजाय, लाइब्रेरियन और संरक्षक जेनिस मेरिल-ओल्डम द्वारा इसके महत्व को बताए जाने के बाद, मूल सूची को संरक्षित करने और प्रदर्शन और संरक्षण के लिए कई प्रतियां तैयार करने का निर्णय लिया गया। स्रोत में एक टिप्पणी डेविडॉफ़ को अल्टेयर बेसिक के गणित पैकेज के लेखक के रूप में श्रेय देती है।

अल्टेयर बेसिक की शुरुआत हुई और जल्द ही अधिकांश शुरुआती घरेलू कंप्यूटरों में माइक्रोसॉफ्ट बेसिक का कोई न कोई रूप चलने लगा। एमओएस टेक्नोलॉजी 6502 सीपीयू के लिए बेसिक पोर्ट, जैसे कि कमोडोर पीईटी में उपयोग किया जाता है, ने 6502 के कम कोड घनत्व के कारण अधिक जगह ले ली। इस वजह से यह संभवतः मशीन-विशिष्ट इनपुट और आउटपुट कोड के साथ एक एकल ROM चिप में फिट नहीं होगा। चूँकि एक अतिरिक्त चिप आवश्यक थी, अतिरिक्त स्थान उपलब्ध था, और इसका उपयोग फ्लोटिंग-पॉइंट प्रारूप को 32 से 40 बिट्स तक बढ़ाने के लिए किया गया था। यह विस्तारित प्रारूप न केवल कमोडोर बेसिक 1 और 2 द्वारा प्रदान किया गया था, बल्कि संस्करण 1.1 (1977) से एप्पलसॉफ्ट बेसिक I और II, संस्करण 1.1ए (1977) से केआईएम-1 बेसिक और संस्करण 2बी (1980) से टेंजेरीन माइक्रोटैन 65 बेसिक द्वारा भी समर्थित था। कुछ ही समय बाद, ज़िलॉग Z80 पोर्ट, जैसे कि TRS-80 (1978) के लिए TRS-80 लेवल II बेसिक, ने 64-बिट, डबल-प्रिसिजन फॉर्मेट को 32-बिट, सिंगल-प्रिसिजन से अलग डेटा प्रकार के रूप में पेश किया।  माइक्रोसॉफ्ट ने फोरट्रान के कार्यान्वयन में समान फ़्लोटिंग-पॉइंट प्रारूपों का उपयोग किया और उनके मैक्रो असेंबलर MASM के लिए, हालाँकि उनकी स्प्रेडशीट मल्टीप्लान है  और उनके COBOL कार्यान्वयन में बाइनरी-कोडित दशमलव (BCD) फ़्लोटिंग पॉइंट का उपयोग किया गया। फिर भी, कुछ समय के लिए एमबीएफ घरेलू कंप्यूटरों पर वास्तविक फ़्लोटिंग-पॉइंट प्रारूप बन गया, इस हद तक कि लोग अभी भी कभी-कभी इसका उपयोग करते हुए विरासत फ़ाइलों और फ़ाइल स्वरूपों का सामना करते हैं।

एक समानांतर विकास में, इंटेल ने 1976 में एक फ्लोटिंग-पॉइंट सह प्रोसेसर  का विकास शुरू किया था।  इंटेल के सलाहकार के रूप में विलियम मोर्टों कहाँ ने सुझाव दिया कि इंटेल डिजिटल इक्विपमेंट कॉर्पोरेशन (DEC) VAX के फ्लोटिंग पॉइंट का उपयोग करे। पहला VAX, VAX-11/780 1977 के अंत में सामने आया था, और इसके फ्लोटिंग पॉइंट को अत्यधिक महत्व दिया गया था। VAX का फ़्लोटिंग-पॉइंट प्रारूप MBF से केवल इस मायने में भिन्न था कि इसमें सबसे महत्वपूर्ण बिट में साइन था। हालाँकि, अपनी चिप को यथासंभव व्यापक बाज़ार में बेचने के लिए, काहन को विशिष्टताओं को तैयार करने के लिए कहा गया था। जब इंटेल की नई चिप की अफवाहें उसके प्रतिस्पर्धियों तक पहुंचीं, तो उन्होंने इंटेल को बहुत अधिक बढ़त हासिल करने से रोकने के लिए आईईईई 754-1985 नामक एक मानकीकरण प्रयास शुरू किया। चूंकि 8-बिट प्रतिपादक दोहरे-परिशुद्धता संख्याओं के लिए वांछित कुछ परिचालनों के लिए पर्याप्त चौड़ा नहीं था, उदाहरण के लिए दो 32-बिट संख्याओं के उत्पाद को संग्रहीत करने के लिए, इंटेल के प्रस्ताव और डीईसी के प्रति-प्रस्ताव में 11 बिट्स का उपयोग किया गया, जैसे 1965 से सीडीसी 6600 का समय-परीक्षणित सीडीसी 6600#60-बिट फ़्लोटिंग पॉइंट|60-बिट फ़्लोटिंग-पॉइंट प्रारूप।   कहन के प्रस्ताव में अनन्तताओं का भी प्रावधान किया गया है, जो विभाजन-दर-शून्य स्थितियों से निपटने में उपयोगी होते हैं; नॉट-ए-नंबर मान, जो अमान्य संचालन से निपटने में उपयोगी होते हैं; असामान्य संख्याएँ, जो अंडरफ्लो के कारण होने वाली समस्याओं को कम करने में मदद करती हैं;   और एक बेहतर संतुलित घातांक पूर्वाग्रह, जो किसी संख्या का व्युत्क्रम लेते समय अतिप्रवाह और अल्पप्रवाह से बचने में मदद कर सकता है।

जब तक QuickBASIC 4.00 जारी किया गया, IEEE 754 मानक व्यापक रूप से अपनाया गया था - उदाहरण के लिए, इसे Intel के Intel 387 सहप्रोसेसर और Intel 80486 से प्रत्येक x86 प्रोसेसर में शामिल किया गया था। QuickBASIC संस्करण 4.0 और 4.5 डिफ़ॉल्ट रूप से IEEE 754 फ़्लोटिंग-पॉइंट वेरिएबल का उपयोग करते हैं, लेकिन (कम से कम संस्करण 4.5 में) एक कमांड-लाइन विकल्प है /MBF आईडीई और कंपाइलर के लिए जो आईईईई से एमबीएफ फ्लोटिंग-पॉइंट नंबरों पर स्विच करता है, पहले से लिखे गए प्रोग्रामों का समर्थन करने के लिए जो एमबीएफ डेटा प्रारूपों के विवरण पर भरोसा करते हैं। विज़ुअल बेसिक (क्लासिक) भी एमबीएफ के बजाय आईईईई 754 प्रारूप का उपयोग करता है।

तकनीकी विवरण
एमबीएफ संख्याओं में 8- अंश बेस-2 एक्सपोनेंट, एक साइन बिट (पॉजिटिव मंटिसा: s = 0; नेगेटिव मंटिसा: s = 1) और एक 23- शामिल होता है।  31- या 55-बिट महत्व का मंटिसा। स्पष्ट मंटिसा के बाईं ओर हमेशा 1-बिट निहित होता है, और रेडिक्स बिंदु इस कल्पित बिट से पहले स्थित होता है. प्रतिपादक को प्रतिपादक पूर्वाग्रह के साथ एन्कोड किया गया है, ताकि प्रतिपादक को x = द्वारा दर्शाया गया है , प्रतिपादक  को x = द्वारा दर्शाया गया है , x = 0 (00h) के लिए एक विशेष मामले में, पूर्ण संख्या शून्य होने का प्रतिनिधित्व करती है।

एमबीएफ डबल-प्रिसिजन प्रारूप आईईईई 754 प्रारूप की तुलना में कम स्केल प्रदान करता है, और हालांकि प्रारूप स्वयं परिशुद्धता का लगभग एक अतिरिक्त दशमलव अंक प्रदान करता है, व्यवहार में संग्रहीत मान कम सटीक होते हैं क्योंकि आईईईई गणना 80-बिट मध्यवर्ती परिणामों का उपयोग करती है, और एमबीएफ नहीं करता है।  IEEE फ़्लोटिंग पॉइंट के विपरीत, MBF असामान्य संख्याओं, अनंतता या NaNs का समर्थन नहीं करता है। एमबीएफ एकल-परिशुद्धता प्रारूप (32 बिट्स, 6-अंकीय बेसिक): एमबीएफ विस्तारित-परिशुद्धता प्रारूप (40 बिट्स, 9-डिजिट बेसिक ): एमबीएफ डबल-प्रिसिजन प्रारूप (64 बिट्स):

उदाहरण

 * 10 : : 32-बिट प्रारूप: 84 घंटे, 20 घंटे, 00 घंटे, 00 घंटे
 * 40-बिट प्रारूप: 84 घंटे, 20 घंटे, 00 घंटे, 00 घंटे, 00 घंटे


 * 2 :
 * 32-बिट प्रारूप: 82 घंटे, 00 घंटे, 00 घंटे, 00 घंटे
 * 40-बिट प्रारूप: 82 घंटे, 00 घंटे, 00 घंटे, 00 घंटे, 00 घंटे


 * 1 : : 32-बिट प्रारूप: 81 घंटे, 00 घंटे, 00 घंटे, 00 घंटे
 * 40-बिट प्रारूप: 81 घंटे, 00 घंटे, 00 घंटे, 00 घंटे, 00 घंटे


 * 0 : : 32-बिट प्रारूप: 00h, 00h, 00h, 00h (या 00h, xxh, xxh, xxh)
 * 40-बिट प्रारूप: 00h, 00h, 00h, 00h, 00h (या 00h, xxh, xxh, xxh, xxh)


 * 0.5 : : 32-बिट प्रारूप: 80h, 00h, 00h, 00h
 * 40-बिट प्रारूप: 80h, 00h, 00h, 00h, 00h


 * 0.25 : : 32-बिट प्रारूप: 7Fh, 00h, 00h, 00h
 * 40-बिट प्रारूप: 7Fh, 00h, 00h, 00h, 00h


 * -0.5 : : 32-बिट प्रारूप: 80h, 80h, 00h, 00h
 * 40-बिट प्रारूप: 80h, 80h, 00h, 00h, 00h


 * वर्ग(0.5) : : 32-बिट प्रारूप: 80h, 35h, 04h, F3h
 * 40-बिट प्रारूप: 80h, 35h, 04h, F3h, 34h


 * वर्ग(2) : : 32-बिट प्रारूप: 81 घंटे, 35 घंटे, 04 घंटे, F3h
 * 40-बिट प्रारूप: 81 घंटे, 35 घंटे, 04 घंटे, एफ3एच, 34 घंटे


 * एलएन(2) : : 32-बिट प्रारूप: 80 घंटे, 31 घंटे, 72 घंटे, 18 घंटे
 * 40-बिट प्रारूप: 80h, 31h, 72h, 17h, F8h


 * लकड़ी का लट्ठा2(यह है) : : अकाबा प्रारूप: 81 एएच, इसे काटो, आह, इसे खेलो
 * 40-बिट प्रारूप: 81 आह, बाइट, आह, खेल, कहानी


 * बी ० ए : : अकाबा प्रारूप: 81 एएच, 49 एएच, 0 एफएएच, डब्बा
 * 40-बिट प्रारूप: 81 एएच, 49 एएच, 0 फाह, दाह, अकाह


 * मेरे पिताजी : : अकाबा प्रारूप: इसे रखें, 49 एच, 0 फाह, डब्बा
 * 40-बिट प्रारूप: इसे रखें, 49 एएच, 0 फाह, दाह, अकाह

यह भी देखें

 * फ़्लोटिंग-पॉइंट अंकगणित
 * आईईईई 754 - फ़्लोटिंग-पॉइंट अंकगणित के लिए मानक
 * आईबीएम हेक्साडेसिमल फ़्लोटिंग-पॉइंट

बाहरी संबंध

 * Microsoft provides a dynamic link library for 16-bit Visual Basic containing functions to convert between MBF data and IEEE 754.
 * This library wraps the MBF conversion functions in the 16-bit Visual C(++) CRT.
 * These conversion functions will round an IEEE double-precision number like ¾ ⋅ 2−128 to zero rather than to 2−128.
 * They don't support denormals at all: the IEEE or MBF single-precision number 2−128 will be converted to zero, even though it is representable in either format.
 * This library is only intended for use with Visual Basic; C(++) programs are expected to call the CRT functions directly.