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

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

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

आईईईई 754 चौगुनी-परिशुद्धता बाइनरी फ़्लोटिंग-पॉइंट प्रारूप: बाइनरी128
IEEE 754 मानक एक बाइनरी128 को इस प्रकार निर्दिष्ट करता है:


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

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



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


 * इmin = 000116 - 3एफएफएफ16 = −16382
 * औरmax = 7एफएफई16 - 3एफएफएफ16 = 16383
 * घातांक पूर्वाग्रह = 3एफएफएफ16 = 16383

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

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

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

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

0000 0000 0000 0000 0000 0000 0000 000116 = 2−16382×2−112=2−16494                                          ≈ 6.4751751194380251109244389582276465525 × 10−4966                                             (सबसे छोटी धनात्मक उपसामान्य संख्या)

0000 उफफफफफफफफफफफफफफफफफफफफफ16 = 2−16382 × (1 − 2−112) ≈ 3.3621031431120935062626778173217519551 × 10−4932                                            (सबसे बड़ी असामान्य संख्या)

0001 0000 0000 0000 0000 0000 0000 000016 = 2−16382                                          ≈ 3.3621031431120935062626778173217526026 × 10−4932                                             (सबसे छोटी सकारात्मक सामान्य संख्या)

7एफएफ फ्फ्फ फ्फ्फ फ्फ्फ फ्फ्फ फ्फ्फ फ्फ्फ16 = 216383 × (2 − 2−112) ≈ 1.1897314953572317650857593266280070162 × 104932                                            (सबसे बड़ी सामान्य संख्या)

3एफएफ फ्फ्फ फ्फ्फ फ्फ्फ फ्फ्फ फ्फ्फ फ्फ्फ16 = 1 − 2−113 ≈ 0.999999999999999999999999999999999999037                                            (एक से कम सबसे बड़ी संख्या)

3fff 0000 0000 0000 0000 0000 0000 000016 = 1 (एक)

3fff 0000 0000 0000 0000 0000 0000 000116 = 1 + 2−112 ≈ 1.000000000000000000000000000001926                                            (एक से बड़ी सबसे छोटी संख्या)

सी000 0000 0000 0000 0000 0000 0000 000016 = −2

0000 0000 0000 0000 0000 0000 0000 000016 = 0 8000 0000 0000 0000 0000 0000 0000 000016 = −0

7fff 0000 0000 0000 0000 0000 0000 000016 = अनंत ffff 0000 0000 0000 0000 0000 0000 000016 = −अनंत

4000 921f b544 42d1 8469 898c c517 01b816 ≈ पी

3ffd 5555 5555 5555 5555 5555 5555 555516 ≈ 1/3

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

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

विशेष रूप से, डबल-डबल तकनीक में एक डबल-डबल/चौगुना-सटीक मान q को योग के रूप में दर्शाया जाता है q = x + y दो दोहरे परिशुद्धता मान 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-बिट विस्तारित परिशुद्धता के रूप में (उदाहरण के लिए जीएनयू सी कंपाइलर जीसीसी और Intel C++ कंपाइलर के साथ   बदलना ) या बस दोहरी परिशुद्धता के पर्याय के रूप में (उदाहरण के लिए माइक्रोसॉफ्ट विजुअल सी++)। ), चौगुनी परिशुद्धता के बजाय। ARM आर्किटेक्चर#AArch64|ARM 64-बिट आर्किटेक्चर (AArch64) के लिए प्रक्रिया कॉल मानक निर्दिष्ट करता है कि   IEEE 754 चतुर्गुण-सटीक प्रारूप से मेल खाता है। कुछ अन्य आर्किटेक्चर पर, कुछ C/C++ कंपाइलर लागू होते हैं   चौगुनी परिशुद्धता के रूप में, उदा. पावरपीसी पर जीसीसी (डबल-डबल के रूप में)।   ) और SPARC, या SPARC पर सन स्टूडियो (सॉफ़्टवेयर)। भले ही   चौगुनी परिशुद्धता नहीं है, हालाँकि, कुछ C/C++ कंपाइलर एक विस्तार के रूप में एक गैरमानक चौगुनी-परिशुद्धता प्रकार प्रदान करते हैं। उदाहरण के लिए, जीसीसी एक चौगुनी-परिशुद्धता प्रकार प्रदान करता है जिसे कहा जाता है   x86, x86-64 और इटेनियम सीपीयू के लिए, और पावरपीसी पर -mfloat128-हार्डवेयर या -mfloat128 विकल्पों का उपयोग करके IEEE 128-बिट फ़्लोटिंग-पॉइंट के रूप में; और x86 और x86-64 के लिए Intel के C/C++ कंपाइलर के कुछ संस्करण एक गैर-मानक चौगुनी-परिशुद्धता प्रकार की आपूर्ति करते हैं जिसे कहा जाता है. Google की कार्य-प्रगति वाली भाषा कार्बन (प्रोग्रामिंग भाषा) 'f128' नामक प्रकार के साथ इसके लिए समर्थन प्रदान करती है।

पुस्तकालय और टूलबॉक्स

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


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

हार्डवेयर समर्थन
IEEE चतुर्भुज परिशुद्धता को 1998 में IBM सिस्टम/390 G5 में जोड़ा गया था, और बाद के z/आर्किटेक्चर प्रोसेसर में हार्डवेयर में समर्थित है। IBM POWER9 CPU (पावर ISA#पावर ISA v.3.0|पावर ISA 3.0) में मूल 128-बिट हार्डवेयर समर्थन है।

IEEE 128-बिट फ़्लोट का मूल समर्थन PA-RISC 1.0 में परिभाषित किया गया है, और SPARC V8 में और वी9 आर्किटेक्चर (उदाहरण के लिए 16 क्वाड-प्रिसिजन रजिस्टर %q0, %q4, ... हैं), लेकिन कोई भी SPARC CPU हार्डवेयर में क्वाड-प्रिसिजन ऑपरेशन लागू नहीं करता है. आईबीएम हेक्साडेसिमल फ्लोटिंग-पॉइंट#एक्सटेंडेड-प्रिसिजन 128-बिट|नॉन-आईईईई एक्सटेंडेड-प्रिसिजन (128 बिट्स ऑफ स्टोरेज, 1 साइन बिट, 7 एक्सपोनेंट बिट्स, 112 फ्रैक्शन बिट्स, 8 बिट्स अप्रयुक्त) को आईबीएम सिस्टम/370 सीरीज (1970-1980 के दशक) में जोड़ा गया था और 196 में कुछ आईबीएम सिस्टम/360|सिस्टम/360 मॉडल पर उपलब्ध था। 0एस (सिस्टम/360-85, -195, और अन्य विशेष अनुरोध द्वारा या ओएस सॉफ़्टवेयर द्वारा सिम्युलेटेड)।

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

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

NEC SX-Aurora TSUBASA आर्किटेक्चर 128-बिट बाइनरी IEEE754 क्वाड सटीक संख्याओं को जोड़ने, घटाने, गुणा करने और तुलना करने का समर्थन करता है। दो पड़ोसी 64-बिट रजिस्टर का उपयोग किया जाता है। क्वाडप्रिसिजन अंकगणित वेक्टर रजिस्टर में समर्थित नहीं है। RISC-वी ी आर्किटेक्चर 128-बिट बाइनरी आईईईई 754-2008 फ्लोटिंग पॉइंट अंकगणित के लिए क्यू (क्वाड-प्रिसिजन) एक्सटेंशन निर्दिष्ट करता है। एल एक्सटेंशन (अभी तक प्रमाणित नहीं) 64-बिट और 128-बिट दशमलव फ़्लोटिंग पॉइंट निर्दिष्ट करेगा। क्वाड्रपल-प्रिसिजन (128-बिट) हार्डवेयर कार्यान्वयन को 128-बिट एफपीयू के साथ भ्रमित नहीं किया जाना चाहिए जो एकल निर्देश, कई डेटा निर्देशों को लागू करता है, जैसे कि स्ट्रीमिंग SIMD एक्सटेंशन या AltiVec, जो चार 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