चौगुनी-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप

कंप्यूटिंग में, क्वाड्रुपल प्रिसिजन (या क्वाड परिशुद्धता) एक बाइनरी फ्लोटिंग पॉइंट-आधारित कंप्यूटर नंबर फॉर्मेट है जो 53-बिट डबल प्रिसिजन से कम से कम दोगुनी प्रिसिजन के साथ 16 बाइट्स (128 बिट्स) पर अधिकृत कर लेता है।

यह 128-बिट क्वाड्रुपल प्रिसिजन न केवल उन अनुप्रयोगों के लिए डिज़ाइन की गई है, जिनके परिणामों की दोगुनी से अधिक प्रिसिजन की आवश्यकता होती है, किंतु एक प्राथमिक कार्य के रूप में, मध्यवर्ती गणनाओं और स्क्रैच वेरिएबल्स में अतिप्रवाह और राउंड-ऑफ त्रुटियों को कम करके दोहरे प्रिसिजन परिणामों की गणना को अधिक विश्वसनीय और स्पष्ट रूप से अनुमति देना है। मूल आईईईई-754 फ़्लोटिंग पॉइंट मानक के प्राथमिक वास्तुकार विलियम ने कहा, अभी के लिए विस्तारित परिशुद्धता या x86 आर्किटेक्चर विस्तारित प्रिसिजन फॉर्मेट या 10-बाइट विस्तारित फॉर्मेट अतिरिक्त-स्पष्ट अंकगणित के मूल्य और इसे तेजी से चलाने के लिए प्रयुक्त करने की मूल्य के बीच एक सहनीय समझौता है; बहुत जल्द प्रिसिजन के दो और बाइट्स सहनीय हो जाएंगे, और अंततः 16-बाइट फॉर्मेट ... व्यापक प्रिसिजन की ओर उस तरह का क्रमिक विकास पहले से ही देखने में था जब आईईईई 754 या फ़्लोटिंग-पॉइंट अंकगणित के लिए आईईईई मानक 754 तैयार किया गया था।

आईईईई 754-2008 में 128-बिट बेस-2 फॉर्मेट को आधिकारिक रूप से बाइनरी128 कहा जाता है।

आईईईई 754 क्वाड्रुपल -प्रिसिजन बाइनरी फ़्लोटिंग-पॉइंट फॉर्मेट: बाइनरी128
आईईईई 754 मानक एक बाइनरी128 को इस प्रकार निर्दिष्ट करता है:


 * साइन बिट: 1 बिट
 * घातांक चौड़ाई: 15 बिट्स
 * महत्वपूर्ण प्रिसिजन (अंकगणित): 113 बिट्स (112 स्पष्ट रूप से संग्रहीत)

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

जब तक घातांक को सभी शून्यों के साथ संग्रहीत नहीं किया जाता है तब तक प्रारूप को मान 1 के साथ एक अंतर्निहित लीड बिट के साथ लिखा जाता है। इस प्रकार मेमोरी फॉर्मेट में महत्व के केवल 112 बिट्स दिखाई देते हैं, किंतु कुल परिशुद्धता 113 बिट्स (लगभग 34 दशमलव अंक: log10(2113) ≈ 34.016 है। बिट्स को इस प्रकार रखा गया है:



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


 * Emin = 000116 − 3FFF16 = −16382
 * Emax = 7FFE16 − 3FFF16 = 16383
 * घातांक पूर्वाग्रह = 3FFF16 = 16383

इस प्रकार, जैसा कि ऑफसेट बाइनरी प्रतिनिधित्व द्वारा परिभाषित किया गया है, वास्तविक घातांक प्राप्त करने के लिए, 16383 के ऑफसेट को संग्रहीत घातांक से घटाना होगा।

संग्रहीत घातांक 000016 और 7FFF16 की विशेष रूप से व्याख्या की गई है।

न्यूनतम सख्ती से धनात्मक (असामान्य) मान 2−16494 ≈ 10−4965 है और इसकी स्पष्टता केवल एक बिट है। न्यूनतम धनात्मक सामान्य मान 2−16382 ≈ 3.3621 × 10−4932 है और इसकी स्पष्टता 113 बिट्स अर्थात ±2−16494 भी है। अधिकतम प्रतिनिधित्व योग्य मान 216384 − 216271 ≈ 1.1897 × 104932. है।

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

डबल-डबल अंकगणित
दोहरे-प्रिसिजन मानों के जोड़े का उपयोग करके लगभग क्वाड्रुपल प्रिसिजन को प्रयुक्त करने की एक सामान्य सॉफ़्टवेयर तकनीक को कभी-कभी 'डबल-डबल अंकगणित' कहा जाता है।  53-बिट महत्व के साथ आईईईई डबल-स्पष्ट मानों के जोड़े का उपयोग करते हुए, डबल-डबल अंकगणित कम से कम महत्व वाले संख्याओं पर संचालन प्रदान करता है 2 × 53 = 106 bits (वास्तव में 107 बिट्स कुछ सबसे बड़े मानों को छोड़कर, सीमित घातांक सीमा के कारण), आईईईई बाइनरी128 क्वाड्रुपल प्रिसिजन के 113-बिट महत्व से केवल थोड़ा कम स्पष्ट डबल-डबल की सीमा अनिवार्य रूप से डबल-स्पष्ट फॉर्मेट के समान ही रहती है क्योंकि घातांक में अभी भी 11 बिट हैं, आईईईई क्वाड्रुपल प्रिसिजन (की एक सीमा) के 15-बिट प्रतिपादक से अधिक कम है (डबल- के लिए 1.8 × 10308 की रेंज) बाइनरी128 के लिए डबल बनाम 1.2 × 104932)।

विशेष रूप से, डबल-डबल तकनीक में एक डबल-डबल/क्वाड्रुपल-स्पष्ट मान q को दो दोहरे-स्पष्ट मान x और y के योग q = x + y के रूप में दर्शाया जाता है, जिनमें से प्रत्येक q के महत्व का आधा भाग प्रदान करता है। अर्थात्, जोड़ी (x, y) को q के स्थान पर संग्रहीत किया जाता है, और q मान (+, -, ×, ...) पर संचालन x और y मानों पर समतुल्य (किंतु अधिक सम्मिश्र ) संचालन में बदल दिया जाता है। इस प्रकार, इस तकनीक में अंकगणित दोहरे-परिशुद्धता संचालन के अनुक्रम में कम हो जाता है; चूंकि डबल-प्रिसिजन अंकगणित समान्यत: हार्डवेयर में प्रयुक्त किया जाता है, डबल-डबल अंकगणित समान्यत: अधिक सामान्य इच्छित -स्पष्ट अंकगणित तकनीकों की तुलना में अधिक तेज होता है।

ध्यान दें कि डबल-डबल अंकगणित में निम्नलिखित विशेष विशेषताएं हैं:
 * जैसे-जैसे मूल्य का परिमाण घटता है, अतिरिक्त परिशुद्धता की मात्रा भी घटती जाती है। इसलिए, सामान्यीकृत सीमा में सबसे छोटी संख्या दोगुनी परिशुद्धता से संकीर्ण है। पूर्ण स्पष्टता के साथ सबसे छोटी संख्या 1000...02 (106 zeros) × 2−1074 या 1.000...02 (106 zeros) × 2−968 है। वे संख्याएँ जिनका परिमाण 2−1021 से छोटा है, उनमें दोहरी परिशुद्धता की तुलना में अतिरिक्त परिशुद्धता नहीं होगी।
 * प्रिसिजन के बिट्स की वास्तविक संख्या भिन्न हो सकती है। सामान्य रूप से संख्या के निम्न-क्रम वाले भाग का परिमाण उच्च-क्रम वाले भाग के आधे यूएलपी से अधिक नहीं होता है। यदि निम्न-क्रम वाला भाग उच्च-क्रम वाले भाग के आधे यूएलपी से कम है, तो उच्च-क्रम और निम्न-क्रम संख्याओं के महत्वपूर्ण के बीच महत्वपूर्ण बिट्स (या तो सभी 0 या सभी 1) निहित हैं। कुछ एल्गोरिदम जो महत्व में बिट्स की एक निश्चित संख्या पर भरोसा करते हैं, 128-बिट लंबी दोहरी संख्याओं का उपयोग करते समय विफल हो सकते हैं।
 * उपरोक्त कारण के कारण, 1 + 2−1074 जैसे मानों का प्रतिनिधित्व करना संभव है, जो 1 से बड़ी सबसे छोटी प्रतिनिधित्व योग्य संख्या है।

डबल-डबल अंकगणित के अतिरिक्त, यदि किसी उच्च प्रिसिजन फ़्लोटिंग-पॉइंट लाइब्रेरी के बिना उच्च प्रिसिजन की आवश्यकता होती है, तो ट्रिपल-डबल या क्वाड-डबल अंकगणित उत्पन्न करना भी संभव है। उन्हें क्रमशः तीन (या चार) दोहरे-स्पष्ट मानों के योग के रूप में दर्शाया जाता है। वे क्रमशः कम से कम 159/161 और 212/215 बिट्स के साथ संचालन का प्रतिनिधित्व कर सकते हैं।

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

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

कंप्यूटर-लैंग्वेज समर्थन
एक अलग प्रश्न यह है कि किस हद तक क्वाड्रुपल -स्पष्ट प्रकारों को सीधे कंप्यूटर प्रोग्रामिंग लैंग्वेज ओं में सम्मिलित किया जाता है।

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

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

x86 और x86-64 पर, सबसे समान्य C/C++ कंपाइलर 80-बिट विस्तारित परिशुद्धता के रूप में  प्रयुक्त करते हैं (उदाहरण के लिए जीएनयू C कंपाइलर जीसीसी और इंटेल C++ कंपाइलर  स्विच के साथ) या बस क्वाड्रुपल परिशुद्धता के अतिरिक्त दोहरी परिशुद्धता (उदाहरण के लिए माइक्रोसॉफ्ट विजुअल C++ ) का पर्याय बन गया है। एआरएम 64-बिट आर्किटेक्चर (एआर्क64) के लिए प्रक्रिया कॉल मानक निर्दिष्ट करता है कि   आईईईई 754 क्वाड्रुपल-प्रिसिजन प्रारूप से मेल खाता है। कुछ अन्य आर्किटेक्चर पर, कुछ C/C++ कंपाइलर लंबे समय तक डबल को क्वाड्रुपल परिशुद्धता के रूप में प्रयुक्त करते हैं, उदाहरण के लिए। पावरपीसी पर जीसीसी (डबल-डबल   के रूप में) और स्पार्क, या स्पार्क पर सन स्टूडियो कंपाइलर तथापि   क्वाड्रुपल परिशुद्धता नहीं है, तथापि, कुछ C/C++ कंपाइलर एक विस्तार के रूप में एक गैरमानक क्वाड्रुपल-स्पष्ट प्रकार प्रदान करते हैं। उदाहरण के लिए, जीसीसी x86, x86-64 और इटेनियम सीपीयू के लिए __float128 नामक एक क्वाड्रुपल-परिशुद्धता प्रकार प्रदान करता है, और पावरपीसी पर -mfloat128-हार्डवेयर या -mfloat128 विकल्पों का उपयोग करके आईईईई 128-बिट फ़्लोटिंग-पॉइंट के रूप में प्रदान करता है; और x86 और x86-64 के लिए Intel के C/C++ कंपाइलर के कुछ संस्करण _Quad नामक एक गैर-मानक चतुर्भुज-स्पष्ट प्रकार की आपूर्ति करते हैं।

गूगल की कार्य-प्रगति वाली लैंग्वेज कार्बन (प्रोग्रामिंग लैंग्वेज ) 'f128' नामक प्रकार के साथ इसके लिए समर्थन प्रदान करती है।

लैब्ररी और टूलबॉक्स

 * जीएनयू कंपाइलर संग्रह क्वाड-प्रिसिजन गणित लाइब्रेरी, लिबक्वाडमैथ,  और   संचालन प्रदान करता है।
 * बूस्ट मल्टीप्रिसिज़न लाइब्रेरी बूस्ट.मल्टीप्रिसिजन  और _Quad प्रकारों के लिए एकीकृत क्रॉस-प्लेटफ़ॉर्म C++ इंटरफ़ेस प्रदान करता है, और इसमें मानक गणित लाइब्रेरी का एक कस्टम कार्यान्वयन सम्मिलित है।
 * मैटलैब के लिए मल्टीप्रिसिजन कंप्यूटिंग टूलबॉक्स मैटलैब में क्वाड्रुपल -प्रिसिजन गणना की अनुमति देता है। इसमें मूलभूत अंकगणितीय कार्यक्षमता के साथ-साथ संख्यात्मक विधियाँ, सघन और विरल रैखिक बीजगणित भी सम्मिलित हैं।
 * डबलफ्लोट्स पैकेज जूलिया प्रोग्रामिंग लैंग्वेज के लिए डबल-डबल संगणना के लिए समर्थन प्रदान करता है।
 * Doubledouble.py लाइब्रेरी पायथन में डबल-डबल गणनाओं को सक्षम बनाती है।


 * मैथमेटिका आईईईई क्वाड-प्रिसिजन संख्याओं का समर्थन करता है: 128-बिट फ़्लोटिंग-पॉइंट मान (रियल128), और 256-बिट सम्मिश्र मान (कॉम्प्लेक्स256)।

हार्डवेयर समर्थन
आईईईई चतुर्भुज प्रिसिजन को 1998 में आईबीएम सिस्टम/390 G5 में जोड़ा गया था, और बाद के z/आर्किटेक्चर प्रोसेसर में हार्डवेयर में समर्थित है। आईबीएम पॉवर9 सीपीयू (पावर आईएसए या पावर आईएसए v.3.0|पावर आईएसए 3.0) में मूल 128-बिट हार्डवेयर समर्थन है।

आईईईई 128-बिट फ़्लोट का मूल समर्थन पीए-रिस्क 1.0 में परिभाषित किया गया है, और स्पार्क V8 में और वी9 आर्किटेक्चर (उदाहरण के लिए 16 क्वाड-प्रिसिजन रजिस्टर %q0, %q4, ... हैं), किंतु कोई भी स्पार्क सीपीयू हार्डवेयर में क्वाड-प्रिसिजन ऑपरेशन प्रयुक्त नहीं करता है.

आईबीएम हेक्साडेसिमल फ्लोटिंग-पॉइंट या एक्सटेंडेड-प्रिसिजन 128-बिट या नॉन-आईईईई एक्सटेंडेड-प्रिसिजन (128 बिट्स ऑफ स्टोरेज, 1 साइन बिट, 7 एक्सपोनेंट बिट्स, 112 फ्रैक्शन बिट्स, 8 बिट्स अप्रयुक्त) को आईबीएम सिस्टम/370 सीरीज (1970-1980 के दशक) में जोड़ा गया था और 196 में कुछ आईबीएम सिस्टम/360 या सिस्टम/360 मॉडल पर उपलब्ध था। 0एस (सिस्टम/360-85, -195, और अन्य विशेष अनुरोध द्वारा या ओएस सॉफ़्टवेयर द्वारा सिम्युलेटेड)।

सीमेंस 7.700 और 7.500 श्रृंखला मेनफ्रेम और उनके उत्तराधिकारी आईबीएम सिस्टम/360 और सिस्टम/370 के समान फ़्लोटिंग-पॉइंट फॉर्मेट और निर्देशों का समर्थन करते हैं।

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

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

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

क्वाड्रपल-प्रिसिजन (128-बिट) हार्डवेयर कार्यान्वयन को 128-बिट एफपीयू के साथ अस्पष्ट नहीं किया जाना चाहिए जो एकल निर्देश, कई डेटा निर्देशों को प्रयुक्त करता है, जैसे कि स्ट्रीमिंग एसआईएमडी एक्सटेंशन या अल्टीवेक, जो चार 32-बिट सिंगल-प्रिसिजन या दो 64-बिट डबल-प्रिसिजन मानों के 128-बिट वेक्टर प्रोसेसर को संदर्भित करता है जो एक साथ संचालित होते हैं।

यह भी देखें

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

बाहरी संबंध

 * High-Precision Software Directory
 * QPFloat, a free software (GPL) software library for quadruple-precision arithmetic
 * HPAlib, a free software (LGPL) software library for quad-precision arithmetic
 * libquadmath, the GCC quad-precision math library
 * IEEE-754 Analysis, Interactive web page for examining Binary32, Binary64, and Binary128 floating-point values