डबल-प्रिसिजन फ़्लोटिंग-पॉइंट फॉर्मेट

डबल-प्रिसिजन फ़्लोटिंग-पॉइंट प्रारूप (जिसे कभी-कभी एफपी64 या फ्लोट64 भी कहा जाता है) एक फ़्लोटिंग-पॉइंट नंबर प्रारूप है, जो प्रायः कंप्यूटर मेमोरी में 64 बिट्स रखता है; यह एक फ़्लोटिंग मूलांक बिंदु का उपयोग करके संख्यात्मक मानों की एक विस्तृत गतिशील श्रृंखला का प्रतिनिधित्व करता है।

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

आईईईई 754-2008 मानकीकरण में, 64-बिट बेस-2 प्रारूप को आधिकारिक तौर पर बाइनरी64 कहा जाता है; IEEE 754-1985 में इसे डबल कहा गया। आईईईई 754 अतिरिक्त फ़्लोटिंग-पॉइंट प्रारूप निर्दिष्ट करता है, जिसमें 32-बिट बेस-2 एकल परिशुद्धता और, हाल ही में, बेस-10 प्रतिनिधित्व शामिल हैं।

सिंगल और डबल-प्रिसिजन फ़्लोटिंग-पॉइंट डेटा प्रकार प्रदान करने वाली पहली प्रोग्रामिंग भाषाओं में से एक फोरट्रान थी। आईईईई 754-1985 को व्यापक रूप से अपनाने से पहले, फ्लोटिंग-पॉइंट डेटा प्रकारों का प्रतिनिधित्व और गुण कंप्यूटर निर्माता और कंप्यूटर मॉडल और प्रोग्रामिंग-भाषा कार्यान्वयनकर्ताओं द्वारा किए गए निर्णयों पर निर्भर थे। उदाहरण के लिए, GW-BASIC का दोहरा-सटीक डेटा प्रकार 64-बिट MBF फ़्लोटिंग-पॉइंट प्रारूप था।

आईईईई 754 डबल-प्रिसिजन बाइनरी फ़्लोटिंग-पॉइंट प्रारूप: बाइनरी64
डबल-प्रिसिजन बाइनरी फ़्लोटिंग-पॉइंट पीसी पर प्रायः इस्तेमाल किया जाने वाला प्रारूप है, इसके प्रदर्शन और बैंडविड्थ लागत के बावजूद, सिंगल-प्रिसिजन फ़्लोटिंग पॉइंट पर इसकी व्यापक रेंज के कारण। इसे प्रायः डबल के नाम से जाना जाता है। IEEE 754 मानक एक 'बाइनरी64' को इस प्रकार निर्दिष्ट करता है: साइन बिट संख्या का चिह्न निर्धारित करता है (इसमें यह भी शामिल है कि जब यह संख्या शून्य है, जिस पर शून्य हस्ताक्षर किया गया है)।
 * साइन बिट: 1 बिट
 * प्रतिपादक: 11 बिट्स
 * महत्वपूर्ण परिशुद्धता (अंकगणित): 53 बिट्स (52 स्पष्ट रूप से संग्रहीत)

घातांक क्षेत्र 0 से 2047 तक 11-बिट अहस्ताक्षरित पूर्णांक है, घातांक पूर्वाग्रह में: 1023 का घातांक मान वास्तविक शून्य का प्रतिनिधित्व करता है। घातांक -1022 से +1023 तक होते हैं क्योंकि -1023 (सभी 0s) और +1024 (सभी 1s) के घातांक विशेष संख्याओं के लिए आरक्षित होते हैं।

53-बिट महत्वपूर्ण परिशुद्धता 15 से 17 महत्वपूर्ण आंकड़े परिशुद्धता देती है (2−53 ≈ 1.11 × 10−16). यदि अधिकतम 15 महत्वपूर्ण अंकों वाली एक दशमलव स्ट्रिंग को सामान्य संख्या देते हुए IEEE 754 डबल-प्रिसिजन प्रारूप में परिवर्तित किया जाता है, और फिर समान अंकों की संख्या के साथ दशमलव स्ट्रिंग में परिवर्तित किया जाता है, तो अंतिम परिणाम मूल स्ट्रिंग से मेल खाना चाहिए। यदि IEEE 754 डबल-प्रिसिजन संख्या को कम से कम 17 महत्वपूर्ण अंकों के साथ दशमलव स्ट्रिंग में परिवर्तित किया जाता है, और फिर वापस डबल-प्रिसिजन प्रतिनिधित्व में परिवर्तित किया जाता है, तो अंतिम परिणाम मूल संख्या से मेल खाना चाहिए। प्रारूप को महत्व के साथ लिखा गया है और इसमें मान 1 का एक अंतर्निहित पूर्णांक बिट है (विशेष डेटा को छोड़कर, नीचे घातांक एन्कोडिंग देखें)। अंश (एफ) के 52 बिट्स के मेमोरी प्रारूप में प्रदर्शित होने के साथ, कुल परिशुद्धता 53 बिट्स (लगभग 16 दशमलव अंक, 53 लॉग) है10(2) ≈ 15.955). बिट्स को इस प्रकार रखा गया है:

किसी दिए गए घातांक पूर्वाग्रह के साथ दिए गए 64-बिट डबल-प्रिसिजन डेटाम द्वारा ग्रहण किया गया वास्तविक मूल्य $$e$$ और एक 52-बिट अंश है
 * $$ (-1)^{\text{sign}}(1.b_{51}b_{50}...b_{0})_2 \times 2^{e-1023} $$

या
 * $$ (-1)^{\text{sign}}\left(1 + \sum_{i=1}^{52} b_{52-i} 2^{-i} \right)\times 2^{e-1023} $$

2 के बीच52=4,503,599,627,370,496 और 253=9,007,199,254,740,992 प्रतिनिधित्व योग्य संख्याएँ बिल्कुल पूर्णांक हैं। अगली रेंज के लिए, 2 से53से 254, हर चीज़ को 2 से गुणा किया जाता है, इसलिए प्रतिनिधित्व योग्य संख्याएँ सम संख्याएँ हैं, आदि। इसके विपरीत, 2 से पिछली सीमा के लिए51से 252, अंतर 0.5 है, आदि।

2 से सीमा में संख्याओं के एक अंश के रूप में अंतरnसे 2n+1 2 हैn−52. किसी संख्या को निकटतम निरूपण योग्य संख्या (मशीन ईपीएसलॉन) में पूर्णांकित करते समय अधिकतम सापेक्ष पूर्णांकन त्रुटि 2 होती है−53.

घातांक की 11 बिट चौड़ाई 10 के बीच संख्याओं के प्रतिनिधित्व की अनुमति देती है−308और 10308, पूर्ण 15-17 दशमलव अंकों की सटीकता के साथ। परिशुद्धता से समझौता करके, असामान्य प्रतिनिधित्व लगभग 5 × 10 तक के छोटे मानों की भी अनुमति देता है−324.

प्रतिपादक एन्कोडिंग
डबल-प्रिसिजन बाइनरी फ़्लोटिंग-पॉइंट एक्सपोनेंट को ऑफसेट-बाइनरी प्रतिनिधित्व का उपयोग करके एन्कोड किया गया है, जिसमें शून्य ऑफसेट 1023 है; IEEE 754 मानक में प्रतिपादक पूर्वाग्रह के रूप में भी जाना जाता है। ऐसे अभ्यावेदन के उदाहरण होंगे: प्रतिपादक  और   एक विशेष अर्थ है: जहाँ F महत्व का भिन्नात्मक भाग है। सभी बिट पैटर्न वैध एन्कोडिंग हैं।
 * = एक हस्ताक्षरित शून्य (यदि एफ = 0) और असामान्य संख्याओं (यदि एफ ≠ 0) का प्रतिनिधित्व करने के लिए उपयोग किया जाता है; और
 * = अनंत को दर्शाने के लिए उपयोग किया जाता है|∞ (यदि F = 0) और NaNs (यदि F ≠ 0),

उपरोक्त अपवादों को छोड़कर, संपूर्ण दोहरी-परिशुद्धता संख्या का वर्णन इस प्रकार किया गया है:


 * $$(-1)^{\text{sign}} \times 2^{e - 1023} \times 1.\text{fraction}$$

असामान्य संख्याओं (e = 0) के मामले में दोहरी-परिशुद्धता संख्या का वर्णन इस प्रकार किया गया है:


 * $$(-1)^{\text{sign}} \times 2^{1-1023} \times 0.\text{fraction} = (-1)^{\text{sign}} \times 2^{-1022} \times 0.\text{fraction}$$

दोहरे-सटीक उदाहरण
NaN#Encoding आईईईई फ़्लोटिंग पॉइंट में पूरी तरह से निर्दिष्ट नहीं हैं और प्रोसेसर पर निर्भर हैं। अधिकांश प्रोसेसर, जैसे कि x86 परिवार और एआरएम वास्तुकला परिवार प्रोसेसर, एक शांत NaN को इंगित करने के लिए महत्व क्षेत्र के सबसे महत्वपूर्ण बिट का उपयोग करते हैं; IEEE 754 द्वारा इसकी अनुशंसा की जाती है। PA-RISC प्रोसेसर सिग्नलिंग NaN को इंगित करने के लिए बिट का उपयोग करते हैं।

डिफ़ॉल्ट रूप से, 1/3 महत्व में बिट्स की विषम संख्या के कारण, एकल परिशुद्धता की तरह ऊपर की बजाय नीचे की ओर गोल किया जाता है।

और अधिक विस्तार में: हेक्साडेसिमल प्रतिनिधित्व को देखते हुए 3FD5 5555 5555 555516, चिह्न = 0 घातांक = 3FD16 =1021 घातांक पूर्वाग्रह = 1023 (स्थिर मान; ऊपर देखें) भिन्न = 5 5555 5555 555516 मान = 2(घातांक - घातांक पूर्वाग्रह) × 1.अंश - ध्यान दें कि भिन्न को यहां दशमलव में परिवर्तित नहीं किया जाना चाहिए = 2−2 × (15 5555 5555 555516 × 2−52)        = 2−54 × 15 5555 5555 555516 = 0.333333333333333314829616256247390992939472198486328125         ≈ 1/3

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

पूर्णांक मानों पर परिशुद्धता सीमाएँ

 * -2 से पूर्णांक53से 253 (−9,007,199,254,740,992 से 9,007,199,254,740,992) को सटीक रूप से दर्शाया जा सकता है
 * 2 के बीच पूर्णांक53और 254 = 18,014,398,509,481,984, 2 के गुणज तक (सम संख्या)
 * 2 के बीच पूर्णांक54और 255 = 36,028,797,018,963,968, 4 के गुणज तक

कार्यान्वयन
डबल्स को कई प्रोग्रामिंग भाषाओं में अलग-अलग तरीकों से लागू किया जाता है जैसे कि निम्नलिखित। केवल गतिशील परिशुद्धता वाले प्रोसेसर पर, जैसे कि SSE2 के बिना x86 (या जब संगतता उद्देश्य के लिए SSE2 का उपयोग नहीं किया जाता है) और डिफ़ॉल्ट रूप से उपयोग की जाने वाली विस्तारित परिशुद्धता के साथ, सॉफ़्टवेयर को कुछ आवश्यकताओं को पूरा करने में कठिनाई हो सकती है।

सी और सी++
C और C++ विभिन्न प्रकार के C डेटा प्रकार#बेसिक प्रकार प्रदान करते हैं। मानकों द्वारा दोहरी परिशुद्धता की आवश्यकता नहीं है (आईईईई 754 अंकगणित को कवर करने वाले सी99 के वैकल्पिक अनुबंध एफ को छोड़कर), लेकिन अधिकांश प्रणालियों पर,  प्रकार दोहरी परिशुद्धता से मेल खाता है। हालाँकि, डिफ़ॉल्ट रूप से विस्तारित परिशुद्धता के साथ 32-बिट x86 पर, कुछ कंपाइलर सी मानक के अनुरूप नहीं हो सकते हैं या अंकगणित राउंडिंग#डबल राउंडिंग से पीड़ित हो सकता है।

फोरट्रान
फोरट्रान कई पूर्णांक और वास्तविक प्रकार और 64-बिट प्रकार प्रदान करता है, फोरट्रान के आंतरिक मॉड्यूल के माध्यम से पहुंच योग्य  , दोहरी परिशुद्धता से मेल खाती है।

सामान्य लिस्प
कॉमन लिस्प शॉर्ट-फ्लोट, सिंगल-फ्लोट, डबल-फ्लोट और लॉन्ग-फ्लोट प्रकार प्रदान करता है। अधिकांश कार्यान्वयन अन्य प्रकार के उपयुक्त पर्यायवाची शब्दों के साथ सिंगल-फ्लोट्स और डबल-फ्लोट्स प्रदान करते हैं। IEEE 754 के अनुसार, सामान्य लिस्प फ़्लोटिंग-पॉइंट अंडरफ्लो और ओवरफ़्लो और सटीक फ़्लोटिंग-पॉइंट अपवाद को पकड़ने के लिए अपवाद प्रदान करता है। ANSI मानक में कोई अनंतता और NaN का वर्णन नहीं किया गया है, हालांकि, कई कार्यान्वयन इन्हें एक्सटेंशन के रूप में प्रदान करते हैं।

जावा
संस्करण 1.2 से पहले जावा (प्रोग्रामिंग भाषा) पर, प्रत्येक कार्यान्वयन को आईईईई 754 के अनुरूप होना था। संस्करण 1.2 ने x87 जैसे प्लेटफार्मों के लिए मध्यवर्ती गणनाओं में अतिरिक्त सटीकता लाने के लिए कार्यान्वयन की अनुमति दी। इस प्रकार सख्त IEEE 754 संगणनाओं को लागू करने के लिए एक संशोधक strictfp पेश किया गया था। जावा 17 में सख्त फ़्लोटिंग पॉइंट बहाल कर दिया गया है।

एकमा स्क्रिप्ट
जैसा कि ईसीएमएस्क्रिप्ट मानक द्वारा निर्दिष्ट किया गया है, जावास्क्रिप्ट (प्रोग्रामिंग भाषा) में सभी अंकगणित डबल-प्रिसिजन फ़्लोटिंग-पॉइंट अंकगणित का उपयोग करके किया जाएगा।

JSON
JSON डेटा एन्कोडिंग प्रारूप संख्यात्मक मानों का समर्थन करता है, और जिस व्याकरण के लिए संख्यात्मक अभिव्यक्तियाँ अनुरूप होनी चाहिए, उसमें एन्कोड किए गए संख्याओं की सटीकता या सीमा पर कोई सीमा नहीं है। हालाँकि, आरएफसी 8259 सलाह देता है कि, चूंकि आईईईई 754 बाइनरी64 नंबर व्यापक रूप से कार्यान्वित हैं, इसलिए जेएसओएन प्रसंस्करण कार्यान्वयन द्वारा अच्छी अंतरसंचालनीयता प्राप्त की जा सकती है यदि वे बाइनरी64 ऑफ़र की तुलना में अधिक सटीकता या सीमा की अपेक्षा नहीं करते हैं।

यह भी देखें

 * आईईईई 754, फ्लोटिंग-पॉइंट अंकगणित के लिए आईईईई मानक
 * डी संकेतन (वैज्ञानिक संकेतन)

नोट्स और संदर्भ
श्रेणी:बाइनरी अंकगणित श्रेणी:कंप्यूटर अंकगणित श्रेणी:फ़्लोटिंग पॉइंट प्रकार