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

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

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

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

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

आईईईई 754 डबल-प्रिसिजन बाइनरी फ़्लोटिंग-पॉइंट फॉर्मेट: बाइनरी64
इसके प्रदर्शन और बैंडविड्थ लागत के बाद भी, सिंगल-प्रिसिजन फ़्लोटिंग पॉइंट पर इसकी व्यापक रेंज के कारण डबल-प्रिसिजन बाइनरी फ़्लोटिंग-पॉइंट पीसी पर साधारणतः उपयोग किया जाने वाला फॉर्मेट है। इसे प्रायः डबल के नाम से जाना जाता है। आईईईई 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 सार्थक अंकों वाली एक डेसीमल स्ट्रिंग को सामान्य संख्या देते हुए आईईईई 754 डबल-प्रिसिजन फॉर्मेट में परिवर्तित किया जाता है, और फिर समान अंकों की संख्या के साथ डेसीमल स्ट्रिंग में परिवर्तित किया जाता है, तो अंतिम परिणाम मूल स्ट्रिंग से सुमेलित होना चाहिए। यदि आईईईई 754 डबल-प्रिसिजन संख्या को कम से कम 17 सार्थक अंकों के साथ डेसीमल स्ट्रिंग में परिवर्तित किया जाता है, और फिर वापस डबल-प्रिसिजन निरूपण में परिवर्तित किया जाता है, तो अंतिम परिणाम मूल संख्या से सुमेलित होना चाहिए।

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

किसी दिए गए एक्सपोनेंट पूर्वाग्रह $$e$$ और एक 52-बिट फ्रैक्शन के साथ दिए गए 64-बिट डबल-प्रिसिजन डेटम द्वारा ग्रहण किया गया वास्तविक मान है
 * $$ (-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} $$

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

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

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

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

एंडियननेस
हालांकि कई प्रोसेसर सभी प्रकार के डेटा (इन्टिजर, फ़्लोटिंग पॉइंट) के लिए छोटे-एंडियन स्टोरेज का उपयोग करते हैं, ऐसे कई हार्डवेयर आर्किटेक्चर हैं जहां फ़्लोटिंग-पॉइंट संख्याओं को बड़े-एंडियन रूप में दर्शाया जाता है जबकि इन्टिजर को छोटे-एंडियन रूप में दर्शाया जाता है। ऐसे एआरएम प्रोसेसर हैं जिनमें डबल-प्रिसिजन संख्याओं के लिए मिश्रित-एंडियन फ़्लोटिंग-पॉइंट निरूपण होता है: दो 32-बिट शब्दों में से प्रत्येक को छोटे-एंडियन के रूप में संग्रहीत किया जाता है, लेकिन सबसे महत्वपूर्ण शब्द पहले संग्रहीत किया जाता है। वीएएक्स फ़्लोटिंग पॉइंट छोटे-एंडियन 16-बिट शब्दों को बड़े-एंडियन क्रम में संग्रहीत करता है। चूँकि ऐसे कई फ़्लोटिंग-पॉइंट फॉर्मेट हैं जिनके लिए कोई नेटवर्क मानक निरूपण नहीं है, एक्सडीआर मानक इसके निरूपण के रूप में बिग-एंडियन आईईईई 754 का उपयोग करता है। इसलिए यह अजीब लग सकता है कि व्यापक आईईईई 754फ़्लोटिंग-पॉइंट मानक एंडियननेस निर्दिष्ट नहीं करता है। सैद्धांतिक रूप से, इसका मतलब यह है कि एक मशीन द्वारा लिखा गया मानक आईईईई फ़्लोटिंग-पॉइंट डेटा भी दूसरे द्वारा पढ़ने योग्य नहीं हो सकता है। हालाँकि, आधुनिक मानक कंप्यूटरों पर (यानी, आईईईई 754 को कार्यान्वित करते हुए), कोई सुरक्षित रूप से मान सकता है कि फ़्लोटिंग-पॉइंट संख्याओं के लिए एंडियननेस इन्टिजर के समान ही है, जिससे डेटा टाइप की परवाह किए बिना रूपांतरण सीधा हो जाता है। विशेष फ़्लोटिंग-पॉइंट फॉर्मेटों का उपयोग करने वाले छोटे एम्बेडेड सिस्टम एक और विषय हो सकता हैं।

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

डिफ़ॉल्ट रूप से, अपूर्णांश में बिट्स की विषम संख्या के कारण, एकल प्रिसिजन की तरह ऊपर की बदले 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

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

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

इन्टिजर मानों पर प्रिसिजन सीमाएँ

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

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

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

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

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

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

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

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

यह भी देखें

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

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