दशमलव चल बिन्दु

दशमलव चल-बिन्दु (डीऍफ़पी) अंकगणित दशमलव डेटा प्रकार चल-बिन्दु संख्याओं पर प्रतिनिधित्व और संचालन दोनों को संदर्भित करता है। दशमलव (आधार-10) अंशों के साथ सीधे कार्य करने से राउंडिंग त्रुटियों से बचा जा सकता है जो सामान्यतः दशमलव अंशों (मानव-प्रविष्ट डेटा में सामान्य, जैसे माप या वित्तीय जानकारी) और बाइनरी (आधार-2) अंशों के बीच परिवर्तित करते समय होती हैं।

दशमलव फिक्स्ड-बिन्दु और पूर्णांक प्रतिनिधित्व पर दशमलव चल-बिन्दु प्रतिनिधित्व का लाभ यह है कि यह मानों की विस्तृत श्रृंखला का समर्थन करता है। उदाहरण के लिए, जबकि 8 दशमलव अंक और 2 दशमलव स्थान आवंटित करने वाला निश्चित-बिंदु प्रतिनिधित्व संख्या 123456.78, 8765.43, 123.00, का प्रतिनिधित्व कर सकता है, और इसी प्रकार 8 दशमलव अंकों के साथ चल-बिन्दु प्रतिनिधित्व 1.2345678, 1234567.8, 0.000012345678, 12345678000000000, और इसी प्रकार का प्रतिनिधित्व कर सकता है। यह व्यापक रेंज क्रमिक गणनाओं के समय राउंडिंग त्रुटियों के संचय को बनावटी रूप से धीमा कर सकती है; उदाहरण के लिए, कहन योग एल्गोरिथम का उपयोग चल बिन्दु में कई संख्याओं को जोड़ने के लिए किया जा सकता है, जिसमें पूर्णन त्रुटि का कोई एसिम्प्टोटिक संचय नहीं होता है।

कार्यान्वयन
अबेकस, स्लाइड नियम, स्मॉलवुड कैलकुलेटर और कुछ अन्य कैलकुलेटर में दशमलव चल बिन्दु के प्रारंभिक यांत्रिक के उपयोग स्पष्ट हैं जो वैज्ञानिक संकेतन में प्रविष्टियों का समर्थन करते हैं। मैकेनिकल कैलकुलेटर की स्थितियों में, घातांक को अधिकांश साइड इनफॉर्मेशन के रूप में माना जाता है जिसे अलग से गणना किया जाता है।

आईबीएम 650 कंप्यूटर ने 1953 में 8-अंकीय दशमलव चल-बिन्दु प्रारूप का समर्थन किया था। अन्यथा बाइनरी वांग वी.एस मशीन ने 1977 में 64-बिट दशमलव फ्लोटिंग-बिन्दु प्रारूप का समर्थन किया था। मोटोरोला 68040 प्रोसेसर के लिए फ्लोटिंग-बिन्दु सपोर्ट लाइब्रेरी ने 1990 में 96-बिट दशमलव फ्लोटिंग-बिन्दु स्टोरेज फॉर्मेट प्रदान किया था।

कुछ कंप्यूटर भाषाओं में दशमलव चल-बिन्दु अंकगणित का कार्यान्वयन होता है, जिसमें पीएल/आई, C# (प्रोग्रामिंग लैंग्वेज), जावा (प्रोग्रामिंग भाषा) सहित बिगडिसीमल, कैल्क के साथ एमएसीएस और पायथन (प्रोग्रामिंग लैंग्वेज) के दशमलव मॉड्यूल सहित दशमलव फ्लोटिंग-बिन्दु अंकगणित का कार्यान्वयन है।

1987 में, आईईई ने आईईई 854 जारी किया, दशमलव चल बिन्दु के साथ कंप्यूटिंग के लिए मानक, जिसमें चल-बिन्दु डेटा को अन्य प्रणाली के साथ इंटरचेंज के लिए कैसे एन्कोड किया जाना चाहिए, इसके लिए विनिर्देश का अभाव था। इसे बाद में आईईई 754-2008 में संबोधित किया गया, जिसने दशमलव चल-बिन्दु डेटा के एन्कोडिंग को दो अलग-अलग वैकल्पिक विधियों के साथ मानकीकृत किया।

आईबीएम् पॉवर6 और नए पॉवर प्रोसेसर में हार्डवेयर में डीऍफ़पी सम्मिलित है, जैसा कि आईबीएम् प्रणाली जेड9 (और बाद में जेडसीरीज मशीनें) में है। सिलमाइंडस सिलक्स, विन्यास योग्य वेक्टर डीऍफ़पी सहसंसाधक प्रदान करता है। आईईई 754-2008 इसे और अधिक विस्तार से परिभाषित करता है। फुजित्सु में हार्डवेयर में डीऍफ़पी के साथ 64-बिट स्पार्क प्रोसेसर भी हैं।

माइक्रोसॉफ्ट सी #, या. नेट, प्रणाली.दशमलव का उपयोग करता है।

आईईई 754-2008 एन्कोडिंग
आईईई 754-2008 मानक 32-, 64- और 128-बिट दशमलव चल-बिन्दु प्रस्तुतियों को परिभाषित करता है। बाइनरी चल-बिन्दु स्वरूपों के प्रकार, संख्या को चिन्ह, प्रतिपादक और महत्व में विभाजित किया जाता है। बाइनरी चल-बिन्दु के विपरीत, संख्याएँ आवश्यक रूप से सामान्यीकृत नहीं होती हैं; कुछ महत्वपूर्ण अंक वाले मानों के कई संभावित प्रतिनिधित्व हैं: 1×102=0.1×103=0.01×104, आदि। जब महत्व शून्य है, तो घातांक का कोई भी मान हो सकता है।

प्रतिपादक श्रेणियों को चुना गया जिससे सामान्यीकृत मानों के लिए उपलब्ध सीमा लगभग सममित हो सके। चूंकि यह संभावित घातांक मानों की समान संख्या के साथ नहीं किया जा सकता है, इसलिए Emax को अतिरिक्त मान दिया गया था।

दो अलग-अलग अभ्यावेदन परिभाषित किए गए हैं:
 * एक द्विआधारी पूर्णांक महत्व क्षेत्र के साथ 0 और 10p−1 के बीच बड़े द्विआधारी पूर्णांक के रूप में महत्व को कूटबद्ध करता है। बाइनरी अंकगणितीय तर्क इकाई का उपयोग करके सॉफ्टवेयर कार्यान्वयन के लिए यह अधिक सुविधाजनक होने का विश्वाश है।
 * 'सघन रूप से भरे किए गए दशमलव महत्व क्षेत्र' के साथ और दशमलव अंकों को अधिक सीधे कूटबद्ध करता है। यह बाइनरी फ्लोटिंग-बिन्दु फॉर्म से और तेजी से रूपांतरण करता है, किन्तु कुशलता से परिवर्तन करने के लिए विशेष हार्डवेयर की आवश्यकता होती है। हार्डवेयर कार्यान्वयन के लिए यह अधिक सुविधाजनक होने का विश्वाश है।

दोनों विकल्प प्रतिनिधित्व योग्य मानों की पूर्णतः समान श्रेणी प्रदान करते हैं।

प्रतिपादक के सबसे महत्वपूर्ण दो बिट 0−2 की सीमा तक सीमित हैं, और महत्व के सबसे महत्वपूर्ण 4 बिट 0−9 की सीमा तक सीमित हैं। अनंत और एनएएन के लिए विशेष रूपों के साथ, 30 संभावित संयोजनों को 5-बिट फ़ील्ड में एन्कोड किया गया है।

यदि महत्व के सबसे महत्वपूर्ण 4 बिट 0 और 7 के बीच हैं, तो एन्कोडेड मान निम्नेन सार प्रारंभ होता है: यदि महत्व के अग्रणी 4 बिट बाइनरी 1000 या 1001 (दशमलव 8 या 9) हैं, तो संख्या इस प्रकार प्रारंभ होती है: अग्रणी बिट (उपर्युक्त में) साइन बिट है, और निम्नलिखित बिट्स (ऊपर में xxx) अतिरिक्त घातांक बिट्स और शेष सबसे महत्वपूर्ण अंक को एन्कोड करते हैं, किन्तु उपयोग किए गए एन्कोडिंग विकल्प के आधार पर विवरण भिन्न होते हैं।

अंतिम संयोजनों का उपयोग इन्फिनिटी और एनएएन के लिए किया जाता है, और दोनों वैकल्पिक एन्कोडिंग के लिए समान हैं: बाद के मामलों में, एन्कोडिंग के अन्य सभी बिट्स को उपेक्षित कर दिया जाता है। इस प्रकार एक बाइट मान के साथ भरकर एक सरणी को NaNs में प्रारंभ करना संभव है।

बाइनरी पूर्णांक महत्व क्षेत्र
यह प्रारूप 0 से 10p−1 तक बाइनरी महत्व का उपयोग करता है. उदाहरण के लिए, दशमलव32 महत्व 107−1 = 9 999  999 = 98967F16 = 1001  1000100101  10011111112 तक हो सकता है। जबकि एन्कोडिंग बड़े महत्व का प्रतिनिधित्व कर सकता है, वे अवैध हैं और इनपुट पर सामना होने पर मानक को 0 के रूप में व्यवहार करने के लिए कार्यान्वयन की आवश्यकता होती है।

जैसा कि ऊपर बताया गया है, एन्कोडिंग इस बात पर निर्भर करती है कि महत्व के सबसे महत्वपूर्ण 4 बिट्स 0 से 7 (00002 से 01112), या उच्चतर (10002 या 10012) की सीमा में हैं।

यदि साइन बिट के बाद के 2 बिट्स 00, 01, या 10 हैं, तो घातांक फ़ील्ड में साइन बिट के बाद 8 बिट्स होते हैं (2 बिट्स का उल्लेख किया गया है और "घातांक निरंतरता क्षेत्र" के 6 बिट्स), और महत्व शेष 23 है बिट्स हैं, जिसमे अंतर्निहित अग्रणी 0 बिट है, जो यहां कोष्ठकों में दिखाया गया है: इसमें उपसामान्य संख्याएं सम्मिलित हैं जहां प्रमुख महत्व और अंक 0 है।

यदि साइन बिट के बाद 2 बिट्स 11 हैं, तो 8-बिट घातांक फ़ील्ड को 2 बिट्स को दाईं ओर स्थानांतरित कर दिया जाता है (साइन बिट और उसके बाद 11 बिट्स दोनों के बाद), और प्रतिनिधित्व महत्व शेष 21 बिट्स में है। इस स्थितियों में वास्तविक महत्व में 3-बिट अनुक्रम 100 का अंतर्निहित (जो संग्रहीत नहीं है) है: साइन बिट के बाद 11 2-बिट अनुक्रम निरुपित करता है कि महत्व के लिए अंतर्निहित 100 3-बिट उपसर्ग है।

ध्यान दें कि महत्व क्षेत्र के प्रमुख बिट्स सबसे महत्वपूर्ण दशमलव अंक को एनकोड नहीं करते हैं; वे बस बड़ी शुद्ध-द्विआधारी संख्या का भाग हैं। उदाहरण के लिए, 8 000  000 के महत्व को बाइनरी 0111  1010000100  1000000000 के रूप में एन्कोड किया गया है जिसमे अग्रणी 4 बिट्स एन्कोडिंग 7 के साथ हैं; पहला महत्व जिसके लिए 24 बिट की आवश्यकता होती है (और इस प्रकार दूसरा एन्कोडिंग फॉर्म) वह 223 = 8  388  608 है.

उपरोक्त मामलों में, प्रतिनिधित्व मान है:


 * (−1)साइन × 10घातांक−101 × महत्व

दशमलव64 और दशमलव128 बड़े एक्सपोनेंट निरंतरता और महत्वपूर्ण क्षेत्रों के साथ समान रूप से संचालित होते हैं। दशमलव128 के लिए, दूसरा एन्कोडिंग फॉर्म वास्तव में कभी 1034−1 = 1ED09BEAD87C0378D8E63FFFFFFFF16 का सबसे बड़ा वैध महत्व113 बिट्स में प्रदर्शित किया जा सकता है।

घनी पैक दशमलव महत्व क्षेत्र
इस संस्करण में, महत्व को दशमलव अंकों की श्रृंखला के रूप में संग्रहीत किया जाता है। अग्रणी अंक 0 और 9 (3 या 4 बाइनरी बिट्स) के बीच है, और शेष महत्व सघन पैक दशमलव (DPD) एन्कोडिंग का उपयोग करता है।

प्रतिपादक के अग्रणी 2 बिट्स और महत्व के अग्रणी अंक (3 या 4 बिट्स) को पांच बिट्स में जोड़ा जाता है जो साइन बिट का पालन करते हैं। इसके बाद फिक्स्ड-ऑफसेट घातांक निरंतर क्षेत्र आता है।

अंत में, महत्व निरंतरता क्षेत्र 2, 5, या 11 10-बिट डिलेट (कंप्यूटिंग) से बना है, प्रत्येक 3 दशमलव अंकों को कूटबद्ध करता है। यदि साइन बिट के बाद पहले दो बिट 11 हैं, तो दूसरे दो बिट घातांक के अग्रणी बिट हैं, और अंतिम बिट को 100 के साथ अग्रणी दशमलव अंक (8 या 9) बनाने के लिए उपसर्ग किया जाता है: 5-बिट फ़ील्ड के शेष दो संयोजन (11110 और 11111) क्रमशः ± अनंत और एनएएनएस का प्रतिनिधित्व करने के लिए उपयोग किए जाते हैं।

चल-बिन्दु अंकगणितीय ऑपरेशन
चल-बिन्दु अंकगणित करने का सामान्य नियम यह है कि त्रुटिहीन गणितीय मान की गणना की जाती है, और फिर परिणाम को निर्दिष्ट शुद्धता में निकटतम प्रतिनिधित्व योग्य मान पर गोल किया जाता है। यह वास्तव में सामान्य राउंडिंग व्यवहार के अनुसार और असाधारण स्थितियों की अनुपस्थिति में आईईईई-अनुपालन कंप्यूटर हार्डवेयर के लिए अनिवार्य व्यवहार है।

प्रस्तुति और समझ में आसानी के लिए, उदाहरणों में 7 अंकों की शुद्धता का उपयोग किया जाएगा। मौलिक सिद्धांत किसी भी परिशुद्धता में समान हैं।

जोड़
चल-बिन्दु नंबर जोड़ने का सरल विधि यह है कि पहले उन्हें उसी घातांक के साथ प्रदर्शित किया जाए। नीचे दिए गए उदाहरण में, दूसरी संख्या को 3 अंकों से दाईं ओर स्थानांतरित कर दिया गया है। हम सामान्य जोड़ विधि के साथ आगे बढ़ते हैं:

निम्न उदाहरण दशमलव है, जिसका सीधा अर्थ है कि आधार 10 है।

123456.7 = 1.234567 × 105  101.7654 = 1.017654 × 102 = 0.001017654 × 105 इस प्रकार: 123456.7 + 101.7654 = (1.234567 × 105) + (1.017654 × 102)                      = (1.234567 × 105) + (0.001017654 × 105)                       = 105 × (1.234567 + 0.001017654)                       = 105 × 1.235584654 यह वैज्ञानिक संकेतन में परिवर्तित होने के अतिरिक्त और कुछ नहीं है।

विस्तार से:

e = 5; s = 1.234567 (123456.7) + e = 2; s = 1.017654 (101.7654)

e = 5; s = 1.234567 + e = 5; s=0.001017654 (after shifting) e = 5; s=1.235584654 (true sum: 123558.4654)

यह सही परिणाम है जो ऑपरेंड का त्रुटिहीन योग है। इसे 7 अंकों तक गोल किया जाएगा और यदि आवश्यक हो तो सामान्य किया जाएगा। अंतिम परिणाम है: e = 5; s=1.235585 (final sum: 123558.5)

ध्यान दें कि दूसरे ऑपरेंड (654) के निम्न 3 अंक अनिवार्य रूप से लुप्त गए हैं। यह राउंड-ऑफ त्रुटि है। अत्यधिक मामलों में, दो गैर-शून्य संख्याओं का योग उनमें से के बराबर हो सकता है:

e = 5; s = 1.234567 + e =-3;s = 9.876543

e = 5; s = 1.234567 + e = 5; s=0.00000009876543 (after shifting) --  e = 5; s=1.23456709876543 (true sum) e = 5; s=1.234567        (after rounding/normalization)

महत्व के हानि की और समस्या तब होती है जब दो लगभग समान संख्याओं के सन्निकटन को घटाया जाता है। निम्नलिखित उदाहरण में e = 5; s = 1.234571 और e = 5; s=1.234567 परिमेय 123457.1467 और 123456.659 के अनुमान हैं।

e = 5; s = 1.234571 - e = 5; s = 1.234567 e = 5; s = 0.000004 e =-1;s=4.000000 (after rounding and normalization)

चल-बिन्दु अंतर की गणना बिल्कुल इसलिए की जाती है क्योंकि संख्याएँ निकट होती हैं - डाई बेंज लेम्मा इसकी गारंटी देता है, यहां तक ​​कि अंडरफ़्लो की स्थितियों में भी जब क्रमिक अंडरफ़्लो समर्थित होता है। इसके अतिरिक्त, मूल संख्याओं का अंतर e=−1, s = 4.877000 है; जो अंतर e = −1 से s= 4.000000अनुमानों के 20% से अधिक भिन्न है। चरम मामलों में, शुद्धता के सभी महत्वपूर्ण अंक लुप्त हो सकते हैं। यह निरस्तीकरण यह मानने के खतरे को दर्शाता है कि गणना किए गए परिणाम के सभी अंक अर्थपूर्ण हैं। इन त्रुटियों के परिणामों से निपटना संख्यात्मक विश्लेषण का विषय है; शुद्धता की समस्याएं भी देखें।

गुणा
गुणा करने के लिए, महत्व को गुणा किया जाता है, चूंकि घातांक जोड़े जाते हैं, और परिणाम को गोल और सामान्यीकृत किया जाता है।

e = 3; s = 4.734612 × e = 5; s = 5.417242 --  e = 8; s=25.648538980104  (true product) e = 8; s=25.64854        (after rounding) e = 9; s = 2.564854      (after normalization)

विभाजन इसी प्रकार किया जाता है, किन्तु वह अधिक जटिल है।

गुणन या विभाजन के साथ निरस्त्रीकरण या अवशोषण की कोई समस्या नहीं है, चूंकि छोटी त्रुटियां जमा हो सकती हैं क्योंकि संचालन बार-बार किया जाता है। व्यवहार में, जिस प्रकार से डिजिटल लॉजिक में ये ऑपरेशन किए जाते हैं वह अधिक जटिल हो सकता है।

यह भी देखें

 * बाइनरी-कोडित दशमलव (बीसीडी)

आगे की पढाई

 * Decimal Floating-Point: Algorism for Computers, Proceedings of the 16th IEEE Symposium on Computer Arithmetic (Cowlishaw, Mike F., 2003)