लॉन्ग डबल

From Vigyanwiki

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

C मेंलॉन्ग डबल

इतिहास

लॉन्ग डबल प्रकार मूल 1989 C मानक में उपस्थित था,[1] लेकिन C मानक, या C99 के 1999 के संशोधन द्वारा समर्थन में सुधार किया गया, जिसने मानक पुस्तकालय (कंप्यूटर विज्ञान) को विस्तारित करने के लिए कार्यों को सम्मिलित करने के लिए विस्तारित किया। लॉन्ग डबल जैसे कि सिनल() और स्र्टोल्ड()।

लंबे दोहरे स्थिरांक L या l (लोअर-केस L) के साथ प्रत्यय वाले फ़्लोटिंग-पॉइंट स्थिरांक हैं, उदाहरण के लिए, 0.33333333333333333333333333333333L या 3.1415926535897932384626433832795029L चौगुनी सटीकता के लिए है। प्रत्यय के बिना, मूल्यांकन एफएलटी_एवल_मेथड पर निर्भर करता है।

कार्यान्वयन

x86 शिल्प विद्या पर, अधिकांश सी संकलनकर्ता x86 हार्डवेयर द्वारा समर्थित 80-बिट विस्तारित सटीक प्रकार के रूप में लॉन्ग डबल को लागू करते हैं (सामान्यतः डेटा संरचना संरेखण को बनाए रखने के लिए 12 या 16 बाइट्स के रूप में संग्रहीत)। x86 के लिए माइक्रोसॉफ्ट विजुअल C++ एक अपवाद है, जो लॉन्ग डबल के लिए एक पर्यायवाची डबल बनाता है। [2] माइक्रोसॉफ़्ट विंडोज़ पर इंटेल C++ संकलनकर्ता विस्तारित परिशुद्धता का समर्थन करता है, लेकिन हार्डवेयर के विस्तारित सटीक प्रारूप के अनुरूप लॉन्ग डबल के लिए /क्यूलॉन्ग-डबल स्विच की आवश्यकता होती है। [3]

संकलनकर्ता भी लॉन्ग डबल चौगुनी परिशुद्धता के लिए आईईईई 754 चौगुनी-परिशुद्धता युग्मक फ्लोटिंग-पॉइंट प्रारूप (युग्मक128) इस्तेमाल कर सकते हैं। यह एचपी-यूएक्स पर स्तिथि है,[4] सोलारिस (ऑपरेटिंग सिस्टम)/स्पार्क, [5] 64-बिट या n32 अनुप्रयोग युग्मक अंतरापृष्ठ के साथ एमआईपीएस शिल्प विद्या,[6] एआरएम शिल्प विद्या 64-बिट एआरएम (AArc64) [7] (मानक एएपीसीएस कॉलिंग अधिवेशन, जैसे लिनक्स) का उपयोग करने वाले ऑपरेटिंग सिस्टम पर, और एफएलओएटी (आईईईई) के साथ z/OS। [8][9][10] अधिकांश कार्यान्वयन सॉफ्टवेयर में हैं, लेकिन कुछ प्रोसेसरों में चौगुनी-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप समर्थन है।

कुछ पावरपीसी सिस्टम पर,[11] लॉन्ग डबल डबल-डबल (अंकगणित) अंकगणित के रूप में कार्यान्वित किया जाता है, जहां एकलॉन्ग डबलमान को दो डबल-परिशुद्धता मानों का सटीक योग माना जाता है, जो कम से कम 106-बिट सटीकता देता है; इस तरह के प्रारूप के साथ लॉन्ग डबल प्रकार आईईईई फ़्लोटिंग-पॉइंट मानक के अनुरूप नहीं है। अन्यथा, लॉन्ग डबलका ही पर्यायवाची डबल(दोहरी सटीकता) है, उदा. 32-बिट एआरएम वास्तुकला पर,[12] एआरएम शिल्प विद्या 64-बिट एआरएम (AArc64) (विंडोज[13] और मैकओएस[14]) और 32-बिट एमआईपीएस पर[15] (पुराना ABI, a.k.a. o32)।

जीएनयू C संकलनकर्ता के साथ, लॉन्ग डबल x86 संसाधक पर 80-बिट विस्तारित परिशुद्धता है, भले ही प्रकार के लिए उपयोग किए जाने वाले भौतिक भंडारण (जो कि 96 या 128 बिट हो सकते हैं)[16] कुछ अन्य शिल्प विद्या पर, लॉन्ग डबल डबल-डबल (अंकगणित) हो सकता है | डबल-डबल (जैसे पावरपीसी पर[17][18][19]) या 128-बिट चौगुनी सटीकता (उदाहरण के लिए स्पार्क[20])। जीसीसी 4.3 के अनुसार, x86 पर एक चौगुनी परिशुद्धता भी समर्थित है, लेकिन गैर-मानक प्रकार के रूप में __फ्लोट128 इसके स्थान पर लॉन्ग डबल।[21]

हालांकि x86 शिल्प विद्या, और विशेष रूप से x86 पर x87 फ़्लोटिंग-पॉइंट निर्देश, 80-बिट विस्तारित-सटीक संचालन का समर्थन करता है, संसाधक को स्वचालित रूप से डबल (या यहां तक ​​​​कि एकल) परिशुद्धता के लिए स्वचालित रूप से गोल करने के लिए समनुरूप करना संभव है। इसके विपरीत, विस्तारित-परिशुद्धता प्रणाली में, विस्तारित परिशुद्धता का उपयोग मध्यवर्ती संकलक-जनित गणनाओं के लिए किया जा सकता है, भले ही अंतिम परिणाम कम सटीकता (यानी C99#आईईईई 754 फ़्लोटिंग-पॉइंट समर्थन एफएलटी_एवल_मेथड == 2) पर संग्रहीत हैं। लिनक्स पर जीसीसी के साथ, 80-बिट विस्तारित परिशुद्धता स्वतः निर्धारित है; कई बीएसडी ऑपरेटिंग सिस्टम (फ्रीबीएसडी और ओपनबीएसडी) पर, डबल-प्रेसिजन प्रणाली स्वतः निर्धारित है, और लॉन्ग डबल संचालन प्रभावी रूप से दोगुनी सटीकता के लिए कम हो जाते हैं। [22] (नेटबीएसडी 7.0 और बाद में, हालांकि, 80-बिट विस्तारित परिशुद्धता के लिए स्वतः निर्धारित है [23])। हालाँकि, एफएलडीसीडब्ल्यू फ़्लोटिंग-पॉइंट लोड कंट्रोल-वर्ड निर्देश के माध्यम से एक व्यक्तिगत कार्यक्रम के भीतर इसे ओवरराइड करना संभव है। [22] x86_64 पर, बीएसडी 80-बिट विस्तारित परिशुद्धता के लिए स्वतः निर्धारित हैं। विजुअल C++ के साथ माइक्रोसॉफ़्ट विंडोज़ भी संसाधक को स्वतः निर्धारित रूप से युग्म-यथार्थमापी प्रणाली में सेट करता है, लेकिन इसे फिर से एक व्यक्तिगत प्रोग्राम (जैसे द्वारा) में ओवरराइड किया जा सकता है। _controlfp_s विजुअल C ++ में कार्य करता है[24]). दूसरी ओर x86 के लिए इंटेल C++ संकलनकर्ता, स्वतः निर्धारित रूप से विस्तृत-यथार्थमापी प्रणाली को सक्षम करता है।[25] IA-32 OS X पर, लॉन्ग डबल 80-बिट विस्तारित परिशुद्धता है।[26]

अन्य विनिर्देश

सीओआरबीए में (3.0 के विनिर्देशन से, जो आईईईई 754-1985|ANSI/आईईईई मानक 754-1985 को इसके संदर्भ के रूप में उपयोग करता है), लंबा डबल डेटा प्रकार एक आईईईई युग्म-विस्तारित फ़्लोटिंग-पॉइंट संख्या का प्रतिनिधित्व करता है, जिसमें कम से कम एक प्रतिपादक होता है लंबाई में 15 बिट और जीओपी/आईआईओपी सीडीआर के साथ कम से कम 64 बिट्स का एक हस्ताक्षरित अंश, जिसका GIOP/IIOP CDR, फ़्लोटिंग-पॉइंट प्रकार फ़्लोटिंग पॉइंट नंबरों के लिए आईईईई मानक स्वरूपों का सटीक रूप से पालन करता है, इसे आईईईई 754-2008 युग्मक 128 ए. के. ए. उस नाम का उपयोग किए बिना सटीकता चौगुनी प्रतीत होती है।

यह भी देखें

संदर्भ

  1. ANSI/ISO 9899-1990 American National Standard for Programming Languages - C, section 6.1.2.5.
  2. "लंबा डबल". learn.microsoft.com (in English). Retrieved 2022-10-06.
  3. Intel Developer Site
  4. Hewlett Packard (1992). "Porting C Programs". HP-UX Portability Guide - HP 9000 Computers (PDF) (2nd ed.). pp. 5-3 and 5-37.
  5. "आईईईई अंकगणित". docs.oracle.com. Retrieved 2022-10-06.
  6. "MIPSpro™ N32 ABI Handbook" (PDF). 1999. Retrieved 2020-05-26.
  7. "Procedure Call Standard for the Arm® 64-bit Architecture (AArch64)". GitHub. 2020-10-01. Archived (PDF) from the original on 2020-10-02.
  8. "फ़्लोटिंग-पॉइंट प्रकार". IBM. 2020-10-09. Retrieved 2020-10-09.
  9. Schwarz, Eric (June 22, 2015). "The IBM z13 SIMD Accelerators for Integer, String, and Floating-Point" (PDF). Retrieved July 13, 2015.
  10. 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.
  11. "The saga of the Power ISA 128-bit long double". 2018-12-22. Retrieved 2021-12-26.
  12. "ARM® Compiler toolchain Compiler Reference, Version 5.03" (PDF). 2013. Section 6.3 Basic data types. Retrieved 2019-11-08.
  13. "llvm/llvm-project". GitHub. Retrieved 2020-09-03.
  14. "llvm/llvm-project". GitHub. Retrieved 2020-09-03.
  15. "System V Application Binary Interface: MIPS(r) Processor Supplement" (PDF) (3rd ed.). 1996. Retrieved 2020-05-26.
  16. "x86 Options (Using the GNU Compiler Collection (GCC))". gcc.gnu.org. Retrieved 2022-10-06.
  17. "RS/6000 and PowerPC Options (Using the GNU Compiler Collection (GCC))". gcc.gnu.org. Retrieved 2022-10-06.
  18. Inside Macintosh - PowerPC Numerics Archived 2012-10-09 at the Wayback Machine
  19. 128-bit long double support routines for Darwin
  20. "स्पार्क विकल्प (जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करके)". gcc.gnu.org. Retrieved 2022-10-06.
  21. "GCC 4.3 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org. Retrieved 2022-10-06.
  22. 22.0 22.1 Brian J. Gough and Richard M. Stallman, An Introduction to GCC, section 8.6 Floating-point issues (Network Theory Ltd., 2004).
  23. "Significant changes from NetBSD 6.0 to 7.0".
  24. "Visual Studio 2005 Retired documentation". Microsoft Download Center (in English). Retrieved 2022-10-06.
  25. Intel C++ Compiler Documentation, Using the -fp-model (/fp) Option.
  26. "IA-32 Function Calling Conventions".