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

दशमलव फ़्लोटिंग-पॉइंट (डीऍफ़पी) अंकगणित दशमलव डेटा प्रकार फ़्लोटिंग-पॉइंट नंबरों पर एक प्रतिनिधित्व और संचालन दोनों को संदर्भित करता है। दशमलव (आधार-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-बिट दशमलव फ्लोटिंग-पॉइंट स्टोरेज फॉर्मेट प्रदान किया।

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

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

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

Microsoft C#, या .NET Framework|.NET, System.Decimal का उपयोग करता है।

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

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

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

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

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

यदि महत्व के सबसे महत्वपूर्ण 4 बिट 0 और 7 के बीच हैं, तो एन्कोडेड मान निम्नेनुसार शुरू होता है:

s 00mmm xxx घातांक 00 से शुरू होता है, जिसका महत्व 0mmm है s 01mmm xxx घातांक 01 से शुरू होता है, जिसका महत्व 0mmm है s 10mmmm xxx घातांक 10 से शुरू होता है, महत्व 0mmm से

यदि महत्व के अग्रणी 4 बिट बाइनरी 1000 या 1001 (दशमलव 8 या 9) हैं, तो संख्या इस प्रकार शुरू होती है:

s 1100m xxx घातांक 00 से शुरू होता है, जिसका महत्व 100m से है s 1101m xxx घातांक 01 से शुरू होता है, जिसका महत्व 100m से है s 1110m xxx घातांक 10 से शुरू होता है, जिसका महत्व 100m से है

अग्रणी बिट (उपर्युक्त में) एक साइन बिट है, और निम्नलिखित बिट्स (ऊपर में xxx) अतिरिक्त एक्सपोनेंट बिट्स और शेष सबसे महत्वपूर्ण अंक को एन्कोड करते हैं, लेकिन उपयोग किए गए एन्कोडिंग विकल्प के आधार पर विवरण भिन्न होते हैं।

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

एस 11110 x ± अनंत (विस्तारित वास्तविक संख्या रेखा देखें) एस 11111 0 शांत NaN (साइन बिट पर ध्यान नहीं दिया गया) एस 11111 1 सिग्नलिंग NaN (साइन बिट अनदेखा)

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

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

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

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

 s 00eeeeee (0)ttt ttttttttttttttttttttttttttttttttttttttttttttt s 01eeeeee (0)ttt ttttttttttttttttttttttttttttttttttttttttttttt एस 10eeeeee (0)ttt tttttttttttttttttttttttttttttttttttttttttttt 

इसमें उपसामान्य संख्याएं सम्मिलित हैं जहां प्रमुख महत्व और अंक 0 है।

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

 एस 1100eeeeee (100) टी ttttttttttttttttttttttttttttttttttttttttttttt एस 1101eeeeee (100) टी tttttttttt ttttttttttt एस 1110eeeeee (100) टी tttttttttt ttttttttttt 

साइन बिट के बाद 11 2-बिट अनुक्रम इंगित करता है कि महत्व के लिए एक अंतर्निहित 100 3-बिट उपसर्ग है।

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

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


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

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

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

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

अंत में, महत्व निरंतरता क्षेत्र 2, 5, या 11 10-बिट डिलेट (कंप्यूटिंग) से बना है, प्रत्येक 3 दशमलव अंकों को कूटबद्ध करता है।  कंघा। एक्सपोनेंट महत्व एस 00 टीटीटी (00) eeeeee (0TTT) [ttttttttt] [tttttttttt] एस 01 टीटीटी (01) eeeeee (0TTT) [ttttttttt] [tttttttttt] एस 10 टीटीटी (10) eeeeee (0TTT) [ttttttttt] [tttttttttt]  यदि साइन बिट के बाद पहले दो बिट 11 हैं, तो दूसरे दो बिट एक्सपोनेंट के अग्रणी बिट हैं, और अंतिम बिट को 100 के साथ अग्रणी दशमलव अंक (8 या 9) बनाने के लिए उपसर्ग किया जाता है:

 कंघा। एक्सपोनेंट महत्व एस 1100 टी (00) eeeeee (100 टी) [ttttttttt] [tttttttttt] एस 1101 टी (01) eeeeee (100T) [ttttttttt] [tttttttttt] एस 1110 टी (10) eeeeee (100T) [ttttttttt] [tttttttttt]  5-बिट फ़ील्ड के शेष दो संयोजन (11110 और 11111) क्रमशः ± अनंत और NaNs का प्रतिनिधित्व करने के लिए उपयोग किए जाते हैं।

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

प्रस्तुति और समझ में आसानी के लिए, उदाहरणों में 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 यह वैज्ञानिक संकेतन में परिवर्तित होने के अलावा और कुछ नहीं है। विस्तार से:

ई = 5; एस = 1.234567 (123456.7) + ई = 2; एस = 1.017654 (101.7654)

ई = 5; एस = 1.234567 + ई = 5; s=0.001017654 (शिफ्टिंग के बाद) ई = 5; s=1.235584654 (सही योग: 123558.4654)

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

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

ई = 5; एस = 1.234567 + ई = -3; एस = 9.876543

ई = 5; एस = 1.234567 + ई = 5; s=0.00000009876543 (शिफ्टिंग के बाद) --  ई = 5; s=1.23456709876543 (सही योग) ई = 5; s=1.234567 (पूर्णांक/सामान्यीकरण के बाद)

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

ई = 5; एस = 1.234571 - ई = 5; एस = 1.234567 ई = 5; एस = 0.000004 ई = -1; s=4.000000 (राउंडिंग और सामान्यीकरण के बाद)

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

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

ई = 3; एस = 4.734612 × ई = 5; एस = 5.417242 --  ई = 8; s=25.648538980104 (वास्तविक गुणनफल) ई = 8; s=25.64854 (पूर्ण करने के बाद) ई = 9; एस = 2.564854 (सामान्यीकरण के बाद)

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

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

यह भी देखें

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

आगे की पढाई

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