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

From Vigyanwiki
No edit summary
No edit summary
Line 103: Line 103:
*उपरोक्त कारण के कारण, {{nowrap|1 + 2<sup>−1074</sup>}} जैसे मानों का प्रतिनिधित्व करना संभव है, जो 1 से बड़ी सबसे छोटी प्रतिनिधित्व योग्य संख्या है।
*उपरोक्त कारण के कारण, {{nowrap|1 + 2<sup>−1074</sup>}} जैसे मानों का प्रतिनिधित्व करना संभव है, जो 1 से बड़ी सबसे छोटी प्रतिनिधित्व योग्य संख्या है।


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


एक समान तकनीक का उपयोग डबल-क्वाड अंकगणित का उत्पादन करने के लिए किया जा सकता है, जिसे दो क्वाड्रुपल -स्पष्ट मानों के योग के रूप में दर्शाया जाता है। वे कम से कम 226 (या 227) बिट्स के साथ संचालन का प्रतिनिधित्व कर सकते हैं।<ref>sourceware.org [http://sourceware.org/ml/libc-alpha/2012-03/msg01024.html Re: The state of glibc libm]</ref>
एक समान तकनीक का उपयोग डबल-क्वाड अंकगणित का उत्पादन करने के लिए किया जा सकता है, जिसे दो क्वाड्रुपल -स्पष्ट मानों के योग के रूप में दर्शाया जाता है। वे कम से कम 226 (या 227) बिट्स के साथ संचालन का प्रतिनिधित्व कर सकते हैं।<ref>sourceware.org [http://sourceware.org/ml/libc-alpha/2012-03/msg01024.html Re: The state of glibc libm]</ref>
Line 109: Line 109:


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


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


[[फोरट्रान]] में क्वाड्रुपल प्रिसिजन  निर्दिष्ट की गई है <code>real(real128)</code> (मापांक <code>iso_fortran_env</code> फोरट्रान 2008 से, स्थिरांक का उपयोग किया जाना चाहिए <code>real128</code> अधिकांश प्रोसेसर पर 16 के बराबर है), या जैसा <code>real(selected_real_kind(33, 4931))</code>, या गैर-मानक तरीके से <code>REAL*16</code>. (क्वाड्रुपल -स्पष्टता <code>REAL*16</code> [[इंटेल फोरट्रान कंपाइलर]] द्वारा समर्थित है<ref>{{cite web|title=इंटेल फोरट्रान कंपाइलर उत्पाद संक्षिप्त (web.archive.org पर संग्रहीत प्रति)|url=http://h21007.www2.hp.com/portal/download/files/unprot/intel/product_brief_Fortran_Linux.pdf |publisher=Su |access-date=2010-01-23 |url-status=unfit |archive-url=https://web.archive.org/web/20081025174427/http://h21007.www2.hp.com/portal/download/files/unprot/intel/product_brief_Fortran_Linux.pdf |archive-date=October 25, 2008 }}</ref> और [[जीएनयू फोरट्रान]] कंपाइलर द्वारा<ref>{{cite web|title= GCC 4.6 Release Series - Changes, New Features, and Fixes |url=https://gcc.gnu.org/gcc-4.6/changes.html|access-date=2010-02-06}}</ref> उदाहरण के लिए, x[[86]], [[x86-64]] और [[इटेनियम]] आर्किटेक्चर पर।)
फोरट्रान में क्वाड्रुपल परिशुद्धता <code>real(real128)</code> द्वारा निर्दिष्ट की जाती है (फोरट्रान 2008 से मॉड्यूल <code>iso_fortran_env</code> का उपयोग किया जाना चाहिए, अधिकांश प्रोसेसर पर निरंतर <code>real128</code> 16 के बराबर है), या <code>real(selected_real_kind(33, 4931))</code>के रूप में, या एक गैर में -वास्तविक जैसा मानक <code>REAL*16</code> (उदाहरण के लिए, क्वाड्रुपल-प्रिसिजन <code>REAL*16</code>इंटेल फोरट्रान कंपाइलर <ref>{{cite web|title= GCC 4.6 Release Series - Changes, New Features, and Fixes |url=https://gcc.gnu.org/gcc-4.6/changes.html|access-date=2010-02-06}}</ref> और x86, x86-64 और इटेनियम आर्किटेक्चर पर जीएनयू फोरट्रान कंपाइलर <ref>{{cite web|title=इंटेल फोरट्रान कंपाइलर उत्पाद संक्षिप्त (web.archive.org पर संग्रहीत प्रति)|url=http://h21007.www2.hp.com/portal/download/files/unprot/intel/product_brief_Fortran_Linux.pdf |publisher=Su |access-date=2010-01-23 |url-status=unfit |archive-url=https://web.archive.org/web/20081025174427/http://h21007.www2.hp.com/portal/download/files/unprot/intel/product_brief_Fortran_Linux.pdf |archive-date=October 25, 2008 }}</ref> द्वारा समर्थित है।)


[[सी (प्रोग्रामिंग भाषा)]] के लिए, आईएसओ/आईईसी टीएस 18661-3 (सी, इंटरचेंज और विस्तारित प्रकारों के लिए फ़्लोटिंग-पॉइंट एक्सटेंशन) निर्दिष्ट करता है <code>_Float128</code> आईईईई 754 चतुर्गुण-स्पष्ट फॉर्मेट (बाइनरी128) को प्रयुक्त करने वाले प्रकार के रूप में।<ref>{{cite web|title=ISO/IEC TS 18661-3|url=https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1945.pdf|date=2015-06-10|access-date=2019-09-22}}</ref> वैकल्पिक रूप से, कुछ प्रणालियों और कंपाइलरों के साथ C (प्रोग्रामिंग भाषा)/[[C++]] में, क्वाड्रुपल प्रिसिजन  को लंबे डबल प्रकार द्वारा निर्दिष्ट किया जा सकता है, किंतु  यह भाषा के लिए आवश्यक नहीं है (जिसके लिए केवल इसकी आवश्यकता होती है) <code>long double</code> कम से कम इतना स्पष्ट होना <code>double</code>), न ही यह आम है.
सी प्रोग्रामिंग लैंग्वेज  के लिए, आईएसओ/आईईसी टीएस 18661-3 (सी, इंटरचेंज और विस्तारित प्रकारों के लिए फ़्लोटिंग-पॉइंट एक्सटेंशन) <code>_Float128</code> को आईईईई 754 चतुर्भुज-स्पष्ट प्रारूप (बाइनरी128) को प्रयुक्त करने वाले प्रकार के रूप में निर्दिष्ट करता है।<ref>{{cite web|title=ISO/IEC TS 18661-3|url=https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1945.pdf|date=2015-06-10|access-date=2019-09-22}}</ref> वैकल्पिक रूप से, कुछ प्रणालियों और कंपाइलरों के साथ [[C++|C]]/[[C++]] में, क्वाड्रुपल परिशुद्धता को <code>लंबे डबल</code> प्रकार द्वारा निर्दिष्ट किया जा सकता है, किंतु यह लैंग्वेज के लिए आवश्यक नहीं है (जिसे कम से कम <code>double</code> जितना स्पष्ट होने के लिए केवल <code>long double</code> की आवश्यकता होती है), न ही ऐसा है यह समान्य है.


x86 और x86-64 पर, सबसे आम C/C++ कंपाइलर प्रयुक्त होते हैं <code>long double</code> या तो 80-बिट [[विस्तारित परिशुद्धता|विस्तारित]] प्रिसिजन  के रूप में (उदाहरण के लिए [[जीएनयू सी कंपाइलर]] जीसीसी<ref>[https://web.archive.org/web/20080713131713/https://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html i386 and x86-64 Options (archived copy on web.archive.org)], ''Using the GNU Compiler Collection''.</ref> और Intel C++ कंपाइलर के साथ <code>/Qlong&#8209;double</code> बदलना<ref>[http://software.intel.com/en-us/articles/size-of-long-integer-type-on-different-architecture-and-os/ Intel Developer Site]</ref>) या बस दोहरी प्रिसिजन  के पर्याय के रूप में (उदाहरण के लिए [[माइक्रोसॉफ्ट विजुअल सी++]])।<ref>[http://msdn.microsoft.com/en-us/library/9cx8xs15.aspx MSDN homepage, about Visual C++ compiler]</ref>), क्वाड्रुपल  प्रिसिजन  के बजाय। ARM आर्किटेक्चर या AArch64|ARM 64-बिट आर्किटेक्चर (AArch64) के लिए प्रक्रिया कॉल मानक निर्दिष्ट करता है कि <code>long double</code> आईईईई 754 चतुर्गुण-स्पष्ट फॉर्मेट से मेल खाता है।<ref>{{cite web|title=Procedure Call Standard for the ARM 64-bit Architecture (AArch64)|url=http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf|date=2013-05-22|access-date=2019-09-22|archive-url=https://web.archive.org/web/20191016000704/http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf|archive-date=2019-10-16|url-status=dead}}</ref> कुछ अन्य आर्किटेक्चर पर, कुछ C/C++ कंपाइलर प्रयुक्त होते हैं <code>long double</code> क्वाड्रुपल प्रिसिजन  के रूप में, उदा. [[पावरपीसी]] पर जीसीसी (डबल-डबल के रूप में)।<ref>[https://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html RS/6000 and PowerPC Options], ''Using the GNU Compiler Collection''.</ref><ref>[https://developer.apple.com/legacy/mac/library/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf Inside Macintosh - PowerPC Numerics] {{webarchive |url=https://web.archive.org/web/20121009191824/http://developer.apple.com/legacy/mac/library/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf |date=October 9, 2012 }}</ref><ref>[https://opensource.apple.com/source/gcc/gcc-5646/gcc/config/rs6000/darwin-ldouble.c 128-bit long double support routines for Darwin]</ref>) और [[SPARC]],<ref>[https://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html SPARC Options], ''Using the GNU Compiler Collection''.</ref> या SPARC पर सन स्टूडियो (सॉफ़्टवेयर)।<ref>[http://docs.oracle.com/cd/E19422-01/819-3693/ncg_lib.html The Math Libraries], Sun Studio 11 ''Numerical Computation Guide'' (2005).</ref> भले ही <code>long double</code> क्वाड्रुपल प्रिसिजन  नहीं है, हालाँकि, कुछ C/C++ कंपाइलर एक विस्तार के रूप में एक गैरमानक क्वाड्रुपल -प्रिसिजन  प्रकार प्रदान करते हैं। उदाहरण के लिए, जीसीसी एक क्वाड्रुपल -प्रिसिजन  प्रकार प्रदान करता है जिसे कहा जाता है <code>__float128</code> x86, x86-64 और इटेनियम सीपीयू के लिए,<ref>[https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html Additional Floating Types], ''Using the GNU Compiler Collection''</ref> और पावरपीसी पर -mfloat128-हार्डवेयर या -mfloat128 विकल्पों का उपयोग करके आईईईई 128-बिट फ़्लोटिंग-पॉइंट के रूप में;<ref name=gcc6changes>{{cite web|title=GCC 6 Release Series - Changes, New Features, and Fixes|url=https://gcc.gnu.org/gcc-6/changes.html|access-date=2016-09-13}}</ref> और x86 और x86-64 के लिए Intel के C/C++ कंपाइलर के कुछ संस्करण एक गैर-मानक क्वाड्रुपल -प्रिसिजन  प्रकार की आपूर्ति करते हैं जिसे कहा जाता है <code>_Quad</code>.<ref>[http://software.intel.com/en-us/forums/showthread.php?t=56359 Intel C++ Forums] (2007).</ref>
x86 और x86-64 पर, सबसे समान्य C/C++ कंपाइलर 80-बिट विस्तारित परिशुद्धता के रूप में <code>long double</code> प्रयुक्त करते हैं (उदाहरण के लिए जीएनयू C कंपाइलर जीसीसी<ref>[https://web.archive.org/web/20080713131713/https://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html i386 and x86-64 Options (archived copy on web.archive.org)], ''Using the GNU Compiler Collection''.</ref> और इंटेल  C++ कंपाइलर<code>/Qlong&#8209;double</code> स्विच<ref>[http://software.intel.com/en-us/articles/size-of-long-integer-type-on-different-architecture-and-os/ Intel Developer Site]</ref> के साथ) या बस क्वाड्रुपल परिशुद्धता के अतिरिक्त दोहरी परिशुद्धता (उदाहरण के लिए माइक्रोसॉफ्ट विजुअल C++<ref>[http://msdn.microsoft.com/en-us/library/9cx8xs15.aspx MSDN homepage, about Visual C++ compiler]</ref>) का पर्याय बन गया है। एआरएम 64-बिट आर्किटेक्चर (एआर्क64) के लिए प्रक्रिया कॉल मानक निर्दिष्ट करता है कि <code>long double</code> आईईईई 754 क्वाड्रुपल-प्रिसिजन प्रारूप से मेल खाता है। <ref>{{cite web|title=Procedure Call Standard for the ARM 64-bit Architecture (AArch64)|url=http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf|date=2013-05-22|access-date=2019-09-22|archive-url=https://web.archive.org/web/20191016000704/http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf|archive-date=2019-10-16|url-status=dead}}</ref> कुछ अन्य आर्किटेक्चर पर, कुछ C/C++ कंपाइलर लंबे समय तक डबल को क्वाड्रुपल परिशुद्धता के रूप में प्रयुक्त करते हैं, उदाहरण के लिए। पावरपीसी पर जीसीसी (डबल-डबल<ref>[https://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html RS/6000 and PowerPC Options], ''Using the GNU Compiler Collection''.</ref><ref>[https://developer.apple.com/legacy/mac/library/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf Inside Macintosh - PowerPC Numerics] {{webarchive |url=https://web.archive.org/web/20121009191824/http://developer.apple.com/legacy/mac/library/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf |date=October 9, 2012 }}</ref><ref>[https://opensource.apple.com/source/gcc/gcc-5646/gcc/config/rs6000/darwin-ldouble.c 128-bit long double support routines for Darwin]</ref> के रूप में) और स्पार्क,<ref>[https://gcc.gnu.org/onlinedocs/gcc/SPARC-Options.html SPARC Options], ''Using the GNU Compiler Collection''.</ref> या स्पार्क पर सन स्टूडियो कंपाइलर<ref>[http://docs.oracle.com/cd/E19422-01/819-3693/ncg_lib.html The Math Libraries], Sun Studio 11 ''Numerical Computation Guide'' (2005).</ref> तथापि  <code>long double</code> क्वाड्रुपल परिशुद्धता नहीं है, तथापि, कुछ C/C++ कंपाइलर एक विस्तार के रूप में एक गैरमानक क्वाड्रुपल-स्पष्ट प्रकार प्रदान करते हैं। उदाहरण के लिए, जीसीसी x86, x86-64 और इटेनियम सीपीयू के लिए __float128 नामक एक क्वाड्रुपल-परिशुद्धता प्रकार प्रदान करता है, <ref>[https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html Additional Floating Types], ''Using the GNU Compiler Collection''</ref> और पावरपीसी पर -mfloat128-हार्डवेयर या -mfloat128 विकल्पों का उपयोग करके आईईईई 128-बिट फ़्लोटिंग-पॉइंट के रूप में प्रदान करता है;<ref name="gcc6changes">{{cite web|title=GCC 6 Release Series - Changes, New Features, and Fixes|url=https://gcc.gnu.org/gcc-6/changes.html|access-date=2016-09-13}}</ref> और x86 और x86-64 के लिए Intel के C/C++ कंपाइलर के कुछ संस्करण _Quad नामक एक गैर-मानक चतुर्भुज-स्पष्ट प्रकार की आपूर्ति करते हैं। <ref>[http://software.intel.com/en-us/forums/showthread.php?t=56359 Intel C++ Forums] (2007).</ref>
Google की कार्य-प्रगति वाली भाषा [[कार्बन (प्रोग्रामिंग भाषा)]] 'f128' नामक प्रकार के साथ इसके लिए समर्थन प्रदान करती है।<ref>{{cite web |url=https://github.com/carbon-language/carbon-lang/blob/trunk/docs/design/README.md#floating-point-types |title=कार्बन भाषा का मुख्य भंडार - भाषा डिज़ाइन|date=2022-08-09 |website=GitHub |access-date=2022-09-22}}</ref>


 
गूगल की कार्य-प्रगति वाली लैंग्वेज  [[कार्बन (प्रोग्रामिंग भाषा)|कार्बन (प्रोग्रामिंग लैंग्वेज )]] 'f128' नामक प्रकार के साथ इसके लिए समर्थन प्रदान करती है।<ref>{{cite web |url=https://github.com/carbon-language/carbon-lang/blob/trunk/docs/design/README.md#floating-point-types |title=कार्बन भाषा का मुख्य भंडार - भाषा डिज़ाइन|date=2022-08-09 |website=GitHub |access-date=2022-09-22}}</ref>
===पुस्तकालय और टूलबॉक्स===
===पुस्तकालय और टूलबॉक्स ===
* [[जीएनयू कंपाइलर संग्रह]] क्वाड-प्रिसिजन गणित लाइब्रेरी, [https://gcc.gnu.org/onlinedocs/libquadmath libquadmath], प्रदान करता है <code>__float128</code> और <code>__complex128</code> परिचालन.
* [[जीएनयू कंपाइलर संग्रह]] क्वाड-प्रिसिजन गणित लाइब्रेरी, [https://gcc.gnu.org/onlinedocs/libquadmath लिबक्वाडमैथ], प्रदान करता है <code>__float128</code> और <code>__complex128</code> परिचालन.
* बूस्ट (सी++ लाइब्रेरी) मल्टीप्रिसिजन लाइब्रेरी बूस्ट.मल्टीप्रिसिजन के लिए एकीकृत क्रॉस-प्लेटफ़ॉर्म सी++ इंटरफ़ेस प्रदान करता है <code>__float128</code> और <code>_Quad</code> प्रकार, और इसमें मानक गणित लाइब्रेरी का एक कस्टम कार्यान्वयन सम्मिलित है।<ref>{{cite web|url=http://www.boost.org/doc/libs/1_58_0/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html|title=Boost.Multiprecision - float128|access-date=2015-06-22}}</ref>
* बूस्ट (सी++ लाइब्रेरी) मल्टीप्रिसिजन लाइब्रेरी बूस्ट.मल्टीप्रिसिजन के लिए एकीकृत क्रॉस-प्लेटफ़ॉर्म सी++ इंटरफ़ेस प्रदान करता है <code>__float128</code> और <code>_Quad</code> प्रकार, और इसमें मानक गणित लाइब्रेरी का एक कस्टम कार्यान्वयन सम्मिलित है।<ref>{{cite web|url=http://www.boost.org/doc/libs/1_58_0/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html|title=Boost.Multiprecision - float128|access-date=2015-06-22}}</ref>
* [[MATLAB]] के लिए मल्टीप्रिसिजन कंप्यूटिंग टूलबॉक्स MATLAB में क्वाड्रुपल -प्रिसिजन  गणना की अनुमति देता है। इसमें बुनियादी अंकगणितीय कार्यक्षमता के साथ-साथ संख्यात्मक विधियाँ, सघन और विरल रैखिक बीजगणित भी सम्मिलित हैं।<ref>{{cite web|url=http://www.advanpix.com/2013/01/20/fast-quadruple-precision-computations/|title=MATLAB में तेज़ चौगुनी परिशुद्धता संगणनाएँ|author=Pavel Holoborodko|date=2013-01-20|access-date=2015-06-22}}</ref>
* [[MATLAB]] के लिए मल्टीप्रिसिजन कंप्यूटिंग टूलबॉक्स MATLAB में क्वाड्रुपल -प्रिसिजन  गणना की अनुमति देता है। इसमें बुनियादी अंकगणितीय कार्यक्षमता के साथ-साथ संख्यात्मक विधियाँ, सघन और विरल रैखिक बीजगणित भी सम्मिलित हैं।<ref>{{cite web|url=http://www.advanpix.com/2013/01/20/fast-quadruple-precision-computations/|title=MATLAB में तेज़ चौगुनी परिशुद्धता संगणनाएँ|author=Pavel Holoborodko|date=2013-01-20|access-date=2015-06-22}}</ref>
* डबलफ्लोट्स<ref>{{cite web|title=DoubleFloats.jl|website=[[GitHub]] |url=https://github.com/JuliaMath/DoubleFloats.jl}}</ref> पैकेज जूलिया प्रोग्रामिंग भाषा के लिए डबल-डबल संगणना के लिए समर्थन प्रदान करता है।
* डबलफ्लोट्स<ref>{{cite web|title=DoubleFloats.jl|website=[[GitHub]] |url=https://github.com/JuliaMath/DoubleFloats.jl}}</ref> पैकेज जूलिया प्रोग्रामिंग लैंग्वेज  के लिए डबल-डबल संगणना के लिए समर्थन प्रदान करता है।
* Doubledouble.py<ref>{{cite web|title=डॉबलेडोउब्ले.पी|website=[[GitHub]] |url=https://github.com/sukop/doubledouble}}</ref> लाइब्रेरी पायथन में डबल-डबल गणनाओं को सक्षम बनाती है। {{Citation needed |reason=It is a single user's project and doesn't seem to have a big community support. |date=October 2022}}
* Doubledouble.py<ref>{{cite web|title=डॉबलेडोउब्ले.पी|website=[[GitHub]] |url=https://github.com/sukop/doubledouble}}</ref> लाइब्रेरी पायथन में डबल-डबल गणनाओं को सक्षम बनाती है। {{Citation needed |reason=It is a single user's project and doesn't seem to have a big community support. |date=October 2022}}


Line 134: Line 133:
आईईईई चतुर्भुज प्रिसिजन  को 1998 में IBM सिस्टम/390 G5 में जोड़ा गया था,<ref>{{cite journal |last1=Schwarz |first1=E. M. |last2=Krygowski |first2=C. A. |date=September 1999 |title=The S/390 G5 floating-point unit |journal=IBM Journal of Research and Development |volume=43 |issue=5/6 |pages=707–721 |doi=10.1147/rd.435.0707 |citeseerx=10.1.1.117.6711 }}</ref> और बाद के z/आर्किटेक्चर प्रोसेसर में हार्डवेयर में समर्थित है।<ref>{{cite news|title=The IBM eServer z990 floating-point unit. IBM J. Res. Dev. 48; pp. 311-322|author=Gerwig, G. and Wetter, H. and Schwarz, E. M. and Haess, J. and Krygowski, C. A. and Fleischer, B. M. and Kroener, M.|date=May 2004}}</ref><ref>{{cite web|url=http://arith22.gforge.inria.fr/slides/s1-schwarz.pdf|author=Eric Schwarz|title=The IBM z13 SIMD Accelerators for Integer, String, and Floating-Point|date=June 22, 2015|access-date=July 13, 2015}}</ref> IBM [[POWER9]] CPU (पावर ISA या पावर ISA v.3.0|पावर ISA 3.0) में मूल 128-बिट हार्डवेयर समर्थन है।<ref name=gcc6changes/>
आईईईई चतुर्भुज प्रिसिजन  को 1998 में IBM सिस्टम/390 G5 में जोड़ा गया था,<ref>{{cite journal |last1=Schwarz |first1=E. M. |last2=Krygowski |first2=C. A. |date=September 1999 |title=The S/390 G5 floating-point unit |journal=IBM Journal of Research and Development |volume=43 |issue=5/6 |pages=707–721 |doi=10.1147/rd.435.0707 |citeseerx=10.1.1.117.6711 }}</ref> और बाद के z/आर्किटेक्चर प्रोसेसर में हार्डवेयर में समर्थित है।<ref>{{cite news|title=The IBM eServer z990 floating-point unit. IBM J. Res. Dev. 48; pp. 311-322|author=Gerwig, G. and Wetter, H. and Schwarz, E. M. and Haess, J. and Krygowski, C. A. and Fleischer, B. M. and Kroener, M.|date=May 2004}}</ref><ref>{{cite web|url=http://arith22.gforge.inria.fr/slides/s1-schwarz.pdf|author=Eric Schwarz|title=The IBM z13 SIMD Accelerators for Integer, String, and Floating-Point|date=June 22, 2015|access-date=July 13, 2015}}</ref> IBM [[POWER9]] CPU (पावर ISA या पावर ISA v.3.0|पावर ISA 3.0) में मूल 128-बिट हार्डवेयर समर्थन है।<ref name=gcc6changes/>


आईईईई 128-बिट फ़्लोट का मूल समर्थन [[PA-RISC]] 1.0 में परिभाषित किया गया है,<ref>{{cite web |url=http://grouper.ieee.org/groups//754/email/msg04128.html |title=बाइनरी इंटरचेंज प्रारूपों के लिए कार्यान्वयनकर्ता समर्थन|website=grouper.ieee.org |archive-url=https://web.archive.org/web/20171027202715/https://grouper.ieee.org/groups//754/email/msg04128.html |archive-date=2017-10-27 |access-date=2021-07-15}}</ref> और SPARC V8 में<ref>{{cite book
आईईईई 128-बिट फ़्लोट का मूल समर्थन [[PA-RISC]] 1.0 में परिभाषित किया गया है,<ref>{{cite web |url=http://grouper.ieee.org/groups//754/email/msg04128.html |title=बाइनरी इंटरचेंज प्रारूपों के लिए कार्यान्वयनकर्ता समर्थन|website=grouper.ieee.org |archive-url=https://web.archive.org/web/20171027202715/https://grouper.ieee.org/groups//754/email/msg04128.html |archive-date=2017-10-27 |access-date=2021-07-15}}</ref> और स्पार्क V8 में<ref>{{cite book
  |title      = The SPARC Architecture Manual: Version 8 (archived copy on web.archive.org)
  |title      = The SPARC Architecture Manual: Version 8 (archived copy on web.archive.org)
  |year        = 1992
  |year        = 1992
Line 144: Line 143:
  |archive-url  = https://web.archive.org/web/20050204100221/http://www.sparc.org/standards/V8.pdf
  |archive-url  = https://web.archive.org/web/20050204100221/http://www.sparc.org/standards/V8.pdf
  |archive-date = 2005-02-04
  |archive-date = 2005-02-04
}}</ref> और वी9<ref>{{cite book |title=The SPARC Architecture Manual: Version 9 (archived copy on web.archive.org) |year=1994 |editor1=David L. Weaver |editor2=Tom Germond |publisher=SPARC International, Inc |url=http://www.sparc.org/standards/SPARCV9.pdf |access-date=2011-09-24 |quote=Floating-point: The architecture provides an IEEE 754-compatible floating-point instruction set, operating on a separate register file that provides 32 single-precision (32-bit), 32 double-precision (64-bit), 16 quad-precision (128-bit) registers, or a mixture thereof. |url-status=dead |archive-url=https://web.archive.org/web/20120118213535/http://www.sparc.org/standards/SPARCV9.pdf |archive-date=2012-01-18 }}</ref> आर्किटेक्चर (उदाहरण के लिए 16 क्वाड-प्रिसिजन रजिस्टर %q0, %q4, ... हैं), किंतु  कोई भी SPARC CPU हार्डवेयर में क्वाड-प्रिसिजन ऑपरेशन प्रयुक्त नहीं करता है {{as of|2004|lc=on}}.<ref>{{cite book
}}</ref> और वी9<ref>{{cite book |title=The SPARC Architecture Manual: Version 9 (archived copy on web.archive.org) |year=1994 |editor1=David L. Weaver |editor2=Tom Germond |publisher=SPARC International, Inc |url=http://www.sparc.org/standards/SPARCV9.pdf |access-date=2011-09-24 |quote=Floating-point: The architecture provides an IEEE 754-compatible floating-point instruction set, operating on a separate register file that provides 32 single-precision (32-bit), 32 double-precision (64-bit), 16 quad-precision (128-bit) registers, or a mixture thereof. |url-status=dead |archive-url=https://web.archive.org/web/20120118213535/http://www.sparc.org/standards/SPARCV9.pdf |archive-date=2012-01-18 }}</ref> आर्किटेक्चर (उदाहरण के लिए 16 क्वाड-प्रिसिजन रजिस्टर %q0, %q4, ... हैं), किंतु  कोई भी स्पार्क CPU हार्डवेयर में क्वाड-प्रिसिजन ऑपरेशन प्रयुक्त नहीं करता है {{as of|2004|lc=on}}.<ref>{{cite book
  | title      = Numerical Computation Guide &mdash; Sun Studio 10
  | title      = Numerical Computation Guide &mdash; Sun Studio 10
  | chapter    = SPARC Behavior and Implementation
  | chapter    = SPARC Behavior and Implementation
Line 157: Line 156:
[[सीमेंस]] 7.700 और 7.500 श्रृंखला मेनफ्रेम और उनके उत्तराधिकारी आईबीएम सिस्टम/360 और सिस्टम/370 के समान फ़्लोटिंग-पॉइंट फॉर्मेट और निर्देशों का समर्थन करते हैं।
[[सीमेंस]] 7.700 और 7.500 श्रृंखला मेनफ्रेम और उनके उत्तराधिकारी आईबीएम सिस्टम/360 और सिस्टम/370 के समान फ़्लोटिंग-पॉइंट फॉर्मेट और निर्देशों का समर्थन करते हैं।


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


[[NEC SX-Aurora TSUBASA]] आर्किटेक्चर 128-बिट बाइनरी IEEE754 क्वाड स्पष्ट संख्याओं को जोड़ने, घटाने, गुणा करने और तुलना करने का समर्थन करता है।<ref>[https://sxauroratsubasa.sakura.ne.jp/documents/sdk/pdfs/VectorEngine-as-manual-v1.4.pdf Vector Engine AssemblyLanguage Reference Manual], Chapter4 Assembler Syntax page 23.</ref> दो पड़ोसी 64-बिट रजिस्टर का उपयोग किया जाता है। क्वाडप्रिसिजन अंकगणित वेक्टर रजिस्टर में समर्थित नहीं है।<ref>[https://sxauroratsubasa.sakura.ne.jp/documents/guide/pdfs/Aurora_ISA_guide.pdf SX-Aurora TSUBASA Architecture Guide Revision 1.1]  (p. 38, 60).</ref>
[[NEC SX-Aurora TSUBASA]] आर्किटेक्चर 128-बिट बाइनरी IEEE754 क्वाड स्पष्ट संख्याओं को जोड़ने, घटाने, गुणा करने और तुलना करने का समर्थन करता है।<ref>[https://sxauroratsubasa.sakura.ne.jp/documents/sdk/pdfs/VectorEngine-as-manual-v1.4.pdf Vector Engine AssemblyLanguage Reference Manual], Chapter4 Assembler Syntax page 23.</ref> दो पड़ोसी 64-बिट रजिस्टर का उपयोग किया जाता है। क्वाडप्रिसिजन अंकगणित वेक्टर रजिस्टर में समर्थित नहीं है।<ref>[https://sxauroratsubasa.sakura.ne.jp/documents/guide/pdfs/Aurora_ISA_guide.pdf SX-Aurora TSUBASA Architecture Guide Revision 1.1]  (p. 38, 60).</ref>
Line 165: Line 164:
== यह भी देखें ==
== यह भी देखें ==
* आईईईई 754, फ्लोटिंग-पॉइंट अंकगणित के लिए आईईईई मानक
* आईईईई 754, फ्लोटिंग-पॉइंट अंकगणित के लिए आईईईई मानक
* आईएसओ/आईईसी 10967, भाषा स्वतंत्र अंकगणित
* आईएसओ/आईईसी 10967, लैंग्वेज  स्वतंत्र अंकगणित
* [[आदिम डेटा प्रकार]]
* [[आदिम डेटा प्रकार]]
* [[क्यू संकेतन (वैज्ञानिक संकेतन)]]
* [[क्यू संकेतन (वैज्ञानिक संकेतन)]]

Revision as of 15:17, 29 July 2023


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

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

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

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

आईईईई 754 मानक एक बाइनरी128 को इस प्रकार निर्दिष्ट करता है:

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

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

एक संकेत बिट, एक 15-बिट प्रतिपादक, और एक 112-बिट महत्व

घातांक एन्कोडिंग

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

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

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

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

प्रतिपादक सार्थकता शून्य सार्थकतथा गैर-शून्य समीकरण
000016 0, −0 subnormal numbers (−1)signbit × 2−16382 × 0.significandbits2
000116, ..., 7FFE16 normalized value (−1)signbit × 2exponentbits2 − 16383 × 1.significandbits2
7FFF16 ± NaN (quiet, signalling)


न्यूनतम सख्ती से धनात्मक (असामान्य) मान 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 राउंड दोहरी परिशुद्धता की तरह नीचे आते हैं। तो गोलाकार बिंदु से परे बिट्स 0101... हैं जो कि अंतिम स्थान पर एक इकाई के 1/2 से कम है।

डबल-डबल अंकगणित

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

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

ध्यान दें कि डबल-डबल अंकगणित में निम्नलिखित विशेष विशेषताएं हैं:[8]

  • जैसे-जैसे मूल्य का परिमाण घटता है, अतिरिक्त परिशुद्धता की मात्रा भी घटती जाती है। इसलिए, सामान्यीकृत सीमा में सबसे छोटी संख्या दोगुनी परिशुद्धता से संकीर्ण है। पूर्ण स्पष्टता के साथ सबसे छोटी संख्या 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) बिट्स के साथ संचालन का प्रतिनिधित्व कर सकते हैं।[9]


कार्यान्वयन

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

कंप्यूटर-लैंग्वेज समर्थन

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

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

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

x86 और x86-64 पर, सबसे समान्य C/C++ कंपाइलर 80-बिट विस्तारित परिशुद्धता के रूप में long double प्रयुक्त करते हैं (उदाहरण के लिए जीएनयू C कंपाइलर जीसीसी[13] और इंटेल C++ कंपाइलर/Qlong‑double स्विच[14] के साथ) या बस क्वाड्रुपल परिशुद्धता के अतिरिक्त दोहरी परिशुद्धता (उदाहरण के लिए माइक्रोसॉफ्ट विजुअल C++[15]) का पर्याय बन गया है। एआरएम 64-बिट आर्किटेक्चर (एआर्क64) के लिए प्रक्रिया कॉल मानक निर्दिष्ट करता है कि long double आईईईई 754 क्वाड्रुपल-प्रिसिजन प्रारूप से मेल खाता है। [16] कुछ अन्य आर्किटेक्चर पर, कुछ C/C++ कंपाइलर लंबे समय तक डबल को क्वाड्रुपल परिशुद्धता के रूप में प्रयुक्त करते हैं, उदाहरण के लिए। पावरपीसी पर जीसीसी (डबल-डबल[17][18][19] के रूप में) और स्पार्क,[20] या स्पार्क पर सन स्टूडियो कंपाइलर[21] तथापि long double क्वाड्रुपल परिशुद्धता नहीं है, तथापि, कुछ C/C++ कंपाइलर एक विस्तार के रूप में एक गैरमानक क्वाड्रुपल-स्पष्ट प्रकार प्रदान करते हैं। उदाहरण के लिए, जीसीसी x86, x86-64 और इटेनियम सीपीयू के लिए __float128 नामक एक क्वाड्रुपल-परिशुद्धता प्रकार प्रदान करता है, [22] और पावरपीसी पर -mfloat128-हार्डवेयर या -mfloat128 विकल्पों का उपयोग करके आईईईई 128-बिट फ़्लोटिंग-पॉइंट के रूप में प्रदान करता है;[23] और x86 और x86-64 के लिए Intel के C/C++ कंपाइलर के कुछ संस्करण _Quad नामक एक गैर-मानक चतुर्भुज-स्पष्ट प्रकार की आपूर्ति करते हैं। [24]

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

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

  • जीएनयू कंपाइलर संग्रह क्वाड-प्रिसिजन गणित लाइब्रेरी, लिबक्वाडमैथ, प्रदान करता है __float128 और __complex128 परिचालन.
  • बूस्ट (सी++ लाइब्रेरी) मल्टीप्रिसिजन लाइब्रेरी बूस्ट.मल्टीप्रिसिजन के लिए एकीकृत क्रॉस-प्लेटफ़ॉर्म सी++ इंटरफ़ेस प्रदान करता है __float128 और _Quad प्रकार, और इसमें मानक गणित लाइब्रेरी का एक कस्टम कार्यान्वयन सम्मिलित है।[26]
  • MATLAB के लिए मल्टीप्रिसिजन कंप्यूटिंग टूलबॉक्स MATLAB में क्वाड्रुपल -प्रिसिजन गणना की अनुमति देता है। इसमें बुनियादी अंकगणितीय कार्यक्षमता के साथ-साथ संख्यात्मक विधियाँ, सघन और विरल रैखिक बीजगणित भी सम्मिलित हैं।[27]
  • डबलफ्लोट्स[28] पैकेज जूलिया प्रोग्रामिंग लैंग्वेज के लिए डबल-डबल संगणना के लिए समर्थन प्रदान करता है।
  • Doubledouble.py[29] लाइब्रेरी पायथन में डबल-डबल गणनाओं को सक्षम बनाती है।[citation needed]
  • मैथमेटिका आईईईई क्वाड-प्रिसिजन संख्याओं का समर्थन करता है: 128-बिट फ़्लोटिंग-पॉइंट मान (Real128), और 256-बिट सम्मिश्र मान (कॉम्प्लेक्स256)।[citation needed]

हार्डवेयर समर्थन

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

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

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

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

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

यह भी देखें

संदर्भ

  1. David H. Bailey; Jonathan M. Borwein (July 6, 2009). "उच्च परिशुद्धता संगणना और गणितीय भौतिकी" (PDF).
  2. Higham, Nicholas (2002). "Designing stable algorithms" in Accuracy and Stability of Numerical Algorithms (2 ed). SIAM. p. 43.
  3. William Kahan (1 October 1987). "Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic" (PDF).
  4. 4.0 4.1 4.2 4.3 Yozo Hida, X. Li, and D. H. Bailey, Quad-Double Arithmetic: Algorithms, Implementation, and Application, Lawrence Berkeley National Laboratory Technical Report LBNL-46996 (2000). Also Y. Hida et al., Library for double-double and quad-double arithmetic (2007).
  5. 5.0 5.1 5.2 J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates, Discrete & Computational Geometry 18:305–363, 1997.
  6. Knuth, D. E. कंप्यूटर प्रोग्रामिंग की कला (2nd ed.). chapter 4.2.3. problem 9.
  7. Robert Munafo F107 and F161 High-Precision Floating-Point Data Types (2011).
  8. 128-Bit Long Double Floating-Point Data Type
  9. sourceware.org Re: The state of glibc libm
  10. "GCC 4.6 Release Series - Changes, New Features, and Fixes". Retrieved 2010-02-06.
  11. "इंटेल फोरट्रान कंपाइलर उत्पाद संक्षिप्त (web.archive.org पर संग्रहीत प्रति)" (PDF). Su. Archived from the original on October 25, 2008. Retrieved 2010-01-23.{{cite web}}: CS1 maint: unfit URL (link)
  12. "ISO/IEC TS 18661-3" (PDF). 2015-06-10. Retrieved 2019-09-22.
  13. i386 and x86-64 Options (archived copy on web.archive.org), Using the GNU Compiler Collection.
  14. Intel Developer Site
  15. MSDN homepage, about Visual C++ compiler
  16. "Procedure Call Standard for the ARM 64-bit Architecture (AArch64)" (PDF). 2013-05-22. Archived from the original (PDF) on 2019-10-16. Retrieved 2019-09-22.
  17. RS/6000 and PowerPC Options, Using the GNU Compiler Collection.
  18. Inside Macintosh - PowerPC Numerics Archived October 9, 2012, at the Wayback Machine
  19. 128-bit long double support routines for Darwin
  20. SPARC Options, Using the GNU Compiler Collection.
  21. The Math Libraries, Sun Studio 11 Numerical Computation Guide (2005).
  22. Additional Floating Types, Using the GNU Compiler Collection
  23. 23.0 23.1 "GCC 6 Release Series - Changes, New Features, and Fixes". Retrieved 2016-09-13.
  24. Intel C++ Forums (2007).
  25. "कार्बन भाषा का मुख्य भंडार - भाषा डिज़ाइन". GitHub. 2022-08-09. Retrieved 2022-09-22.
  26. "Boost.Multiprecision - float128". Retrieved 2015-06-22.
  27. Pavel Holoborodko (2013-01-20). "MATLAB में तेज़ चौगुनी परिशुद्धता संगणनाएँ". Retrieved 2015-06-22.
  28. "DoubleFloats.jl". GitHub.
  29. "डॉबलेडोउब्ले.पी". GitHub.
  30. Schwarz, E. M.; Krygowski, C. A. (September 1999). "The S/390 G5 floating-point unit". IBM Journal of Research and Development. 43 (5/6): 707–721. CiteSeerX 10.1.1.117.6711. doi:10.1147/rd.435.0707.
  31. Gerwig, G. and Wetter, H. and Schwarz, E. M. and Haess, J. and Krygowski, C. A. and Fleischer, B. M. and Kroener, M. (May 2004). "The IBM eServer z990 floating-point unit. IBM J. Res. Dev. 48; pp. 311-322".{{cite news}}: CS1 maint: multiple names: authors list (link)
  32. Eric Schwarz (June 22, 2015). "The IBM z13 SIMD Accelerators for Integer, String, and Floating-Point" (PDF). Retrieved July 13, 2015.
  33. "बाइनरी इंटरचेंज प्रारूपों के लिए कार्यान्वयनकर्ता समर्थन". grouper.ieee.org. Archived from the original on 2017-10-27. Retrieved 2021-07-15.
  34. The SPARC Architecture Manual: Version 8 (archived copy on web.archive.org) (PDF). SPARC International, Inc. 1992. Archived from the original (PDF) on 2005-02-04. Retrieved 2011-09-24. SPARC is an instruction set architecture (ISA) with 32-bit integer and 32-, 64-, and 128-bit IEEE Standard 754 floating-point as its principal data types.
  35. David L. Weaver; Tom Germond, eds. (1994). The SPARC Architecture Manual: Version 9 (archived copy on web.archive.org) (PDF). SPARC International, Inc. Archived from the original (PDF) on 2012-01-18. Retrieved 2011-09-24. Floating-point: The architecture provides an IEEE 754-compatible floating-point instruction set, operating on a separate register file that provides 32 single-precision (32-bit), 32 double-precision (64-bit), 16 quad-precision (128-bit) registers, or a mixture thereof.
  36. "SPARC Behavior and Implementation". Numerical Computation Guide — Sun Studio 10. Sun Microsystems, Inc. 2004. Retrieved 2011-09-24. There are four situations, however, when the hardware will not successfully complete a floating-point instruction: ... The instruction is not implemented by the hardware (such as ... quad-precision instructions on any SPARC FPU).
  37. Padegs A (1968). "Structural aspects of the System/360 Model 85, III: Extensions to floating-point architecture". IBM Systems Journal. 7: 22–29. doi:10.1147/sj.71.0022.
  38. Vector Engine AssemblyLanguage Reference Manual, Chapter4 Assembler Syntax page 23.
  39. SX-Aurora TSUBASA Architecture Guide Revision 1.1 (p. 38, 60).
  40. RISC-V ISA Specification v. 20191213, Chapter 13, “Q” Standard Extension for Quad-Precision Floating-Point, page 79.
  41. [1] Chapter 15 (p. 95).


बाहरी संबंध