आईईईई 754-1985: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{short description|First edition of the IEEE 754 floating-point standard}}
{{short description|First edition of the IEEE 754 floating-point standard}}
{{See also|आईईईई 754}}
{{See also|आईईईई 754}}
आईईईई 754-1985<ref>{{Cite book|title=बाइनरी फ़्लोटिंग-पॉइंट अंकगणित के लिए आईईईई मानक|year=1985|doi=10.1109/IEEESTD.1985.82928|isbn=0-7381-1165-1}}</ref> [[कंप्यूटर]] में [[ तैरनेवाला स्थल ]] नंबरों का प्रतिनिधित्व करने के लिए उद्योग [[तकनीकी मानक]] था, जिसे आधिकारिक तौर पर 1985 में अपनाया गया था और 2008 में [[IEEE 754-2008|आईईईई 754-2008]] द्वारा प्रतिस्थापित किया गया था, और फिर 2019 में मामूली संशोधन [[IEEE 754-2019|आईईईई 754-2019]] द्वारा प्रतिस्थापित किया गया था।<ref>{{Cite web|url=http://754r.ucbtest.org/background/|title=ANSI/IEEE Std 754-2019|website=754r.ucbtest.org|access-date=2019-08-06}}</ref> अपने 23 वर्षों के दौरान, यह फ़्लोटिंग-पॉइंट गणना के लिए सबसे व्यापक रूप से उपयोग किया जाने वाला प्रारूप था। इसे सॉफ़्टवेयर में, फ़्लोटिंग-पॉइंट [[ पुस्तकालय (कंप्यूटिंग) ]] के रूप में, और हार्डवेयर में, कई [[ CPU ]] और [[फ़्लोटिंग-पॉइंट इकाई]] के [[निर्देश (कंप्यूटर विज्ञान)]] में लागू किया गया था। आईईईई 754-1985 बनने वाले मसौदे को लागू करने वाला पहला ीकृत सर्किट [[इंटेल 8087]] था।
'''आईईईई 754-1985'''<ref>{{Cite book|title=बाइनरी फ़्लोटिंग-पॉइंट अंकगणित के लिए आईईईई मानक|year=1985|doi=10.1109/IEEESTD.1985.82928|isbn=0-7381-1165-1}}</ref> [[कंप्यूटर]] में [[ तैरनेवाला स्थल |फ्लोटिंग-पॉइंट]] नंबरों का प्रतिनिधित्व करने के लिए उद्योग [[तकनीकी मानक|मानक]] था, जिसे सामान्यतः 1985 में स्वीकार किया गया था और 2008 में [[IEEE 754-2008|आईईईई 754-2008]] द्वारा प्रतिस्थापित किया गया था, और फिर 2019 में सामान्य संशोधन [[IEEE 754-2019|आईईईई 754-2019]] द्वारा प्रतिस्थापित किया गया था।<ref>{{Cite web|url=http://754r.ucbtest.org/background/|title=ANSI/IEEE Std 754-2019|website=754r.ucbtest.org|access-date=2019-08-06}}</ref> अपने 23 वर्षों के समय, यह फ़्लोटिंग-पॉइंट गणना के लिए सबसे व्यापक रूप से उपयोग किया जाने वाला प्रारूप था। इसे सॉफ़्टवेयर में, फ़्लोटिंग-पॉइंट [[ पुस्तकालय (कंप्यूटिंग) |लाइब्रेरीज़]] के रूप में, और हार्डवेयर में, कई [[ CPU |सीपीयू]] और [[फ़्लोटिंग-पॉइंट इकाई|एफपीयू]] के [[निर्देश (कंप्यूटर विज्ञान)|निर्देशों]] में प्रस्तावित किया गया था। आईईईई 754-1985 बनने वाले उपाय को प्रस्तावित करने वाला प्रथम एकीकृत सर्किट [[इंटेल 8087]] था।


आईईईई 754-1985 बाइनरी अंक प्रणाली में संख्याओं का प्रतिनिधित्व करता है, जो परिशुद्धता के चार स्तरों की परिभाषा प्रदान करता है, जिनमें से दो सबसे अधिक उपयोग किए जाते हैं:
आईईईई 754-1985 बाइनरी में संख्याओं का प्रतिनिधित्व करता है, जो परिशुद्धता के चार स्तरों की परिभाषा प्रदान करता है, जिनमें से दो सबसे अधिक उपयोग किए जाते हैं:


{| class="wikitable"
{| class="wikitable"
|-
|-
!Level
!लेवल
!Width
!विड्थ
!Range at full [[Precision (computer science)|precision]]
!पूर्ण त्रुटिहीनता से रेंज करें
!Precision{{efn|Precision: The number of decimal digits precision is calculated via number_of_mantissa_bits * Log<sub>10</sub>(2). Thus ~7.2 and ~15.9 for single and double precision respectively.}}
!त्रुटिहीनता{{efn|Precision: The number of decimal digits precision is calculated via number_of_mantissa_bits * Log<sub>10</sub>(2). Thus ~7.2 and ~15.9 for single and double precision respectively.}}
|-
|-
|Single precision
|एकल त्रुटिहीनता
|32 bits
|32 bits
|±1.18{{e|-38}} to ±3.4{{e|38}}
|±1.18{{e|-38}} to ±3.4{{e|38}}
|Approximately 7 decimal digits
|लगभग 7 दशमलव अंक
|-
|-
|Double precision
|दोगुना त्रुटिहीनता
|64 bits
|64 bits
|±2.23{{e|-308}} to ±1.80{{e|308}}
|±2.23{{e|-308}} to ±1.80{{e|308}}
|Approximately 16 decimal digits
|लगभग 16 दशमलव अंक
|}
|}
मानक सकारात्मक और नकारात्मक अनंत के लिए प्रतिनिधित्व को भी परिभाषित करता है, [[नकारात्मक शून्य]], [[शून्य से विभाजन]] जैसे अमान्य परिणामों को संभालने के लिए पांच अपवाद, उन अपवादों का प्रतिनिधित्व करने के लिए [[NaN]] नामक विशेष मान, ऊपर दिखाए गए से छोटी संख्याओं का प्रतिनिधित्व करने के लिए [[असामान्य संख्या]]एं, और चार गोल मोड।
मानक सकारात्मक और नकारात्मक अनंत के लिए प्रतिनिधित्व को भी परिभाषित करता है, [[नकारात्मक शून्य]], [[शून्य से विभाजन]] जैसे अमान्य परिणामों को संभालने के लिए पांच अपवाद, उन अपवादों का प्रतिनिधित्व करने के लिए विशेष मान जिन्हें  [[NaN]] कहा जाता है, ऊपर दिखाए गए छोटी संख्याओं का प्रतिनिधित्व करने के लिए [[असामान्य संख्या|असामान्य संख्याएं]], और चार गोल मोड है।


==संख्याओं का प्रतिनिधित्व==
==संख्याओं का प्रतिनिधित्व==
Line 40: Line 40:
: भिन्न = .01000…<sub>2</sub>.
: भिन्न = .01000…<sub>2</sub>.


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


अग्रणी 1 बिट को हटा दिया गया है क्योंकि शून्य को छोड़कर सभी संख्याएँ अग्रणी 1 से शुरू होती हैं; अग्रणी 1 अंतर्निहित है और वास्तव में इसे संग्रहीत करने की आवश्यकता नहीं है जो मुफ़्त में अतिरिक्त परिशुद्धता देता है।
अग्रणी 1 बिट को हटा दिया गया है क्योंकि शून्य को छोड़कर सभी संख्याएँ अग्रणी 1 से शुरू होती हैं; अग्रणी 1 अंतर्निहित है और वास्तव में इसे संग्रहीत करने की आवश्यकता नहीं है जो मुफ़्त में अतिरिक्त परिशुद्धता देता है।
Line 161: Line 161:
| ≈ 2.02824e31
| ≈ 2.02824e31
|}
|}
उदाहरण के तौर पर, 16,777,217 को 32-बिट फ़्लोट के रूप में एन्कोड नहीं किया जा सकता क्योंकि इसे 16,777,216 पर पूर्णांकित किया जाएगा। इससे पता चलता है कि फ़्लोटिंग पॉइंट अंकगणित लेखांकन सॉफ़्टवेयर के लिए अनुपयुक्त क्यों है। हालाँकि, प्रतिनिधित्व योग्य सीमा के भीतर सभी पूर्णांक जो 2 की शक्ति हैं, उन्हें बिना गोलाई के 32-बिट फ़्लोट में संग्रहीत किया जा सकता है।
उदाहरण के तौर पर, 16,777,217 को 32-बिट फ़्लोट के रूप में एन्कोड नहीं किया जा सकता क्योंकि इसे 16,777,216 पर पूर्णांकित किया जाएगा। इससे पता चलता है कि फ़्लोटिंग पॉइंट अंकगणित लेखांकन सॉफ़्टवेयर के लिए अनुपयुक्त क्यों है। चूँकि, प्रतिनिधित्व योग्य सीमा के भीतर सभी पूर्णांक जो 2 की शक्ति हैं, उन्हें बिना गोलाई के 32-बिट फ़्लोट में संग्रहीत किया जा सकता है।


=== दोहरी परिशुद्धता ===
=== दोहरी परिशुद्धता ===
Line 359: Line 359:


फ़्लोटिंग पॉइंट गणनाओं में निहित राउंडिंग त्रुटियाँ परिणामों की त्रुटिहीन समानता की जाँच के लिए तुलनाओं के उपयोग को सीमित कर सकती हैं। स्वीकार्य सीमा चुनना  जटिल विषय है। अनुमानित तुलना करने के लिए तुलनात्मक ईपीएसलॉन मान का उपयोग करना  सामान्य तकनीक है।<ref>{{cite web|url=https://github.com/godotengine/godot/blob/master/core/math/math_funcs.h#L302|title=Godot math_funcs.h|website=GitHub.com|date=30 July 2022 }}</ref> तुलनाएँ कितनी उदार हैं, इसके आधार पर सामान्य मूल्यों में सम्मिलित हैं <code>1e-6</code> या <code>1e-5</code> ल परिशुद्धता के लिए, और <code>1e-14</code> दोहरी परिशुद्धता के लिए.<ref>{{cite web|url=https://github.com/godotengine/godot/blob/master/core/math/math_defs.h#L34|title=Godot math_defs.h|website=GitHub.com|date=30 July 2022 }}</ref><ref>{{cite web|url=https://github.com/godotengine/godot/blob/master/modules/mono/glue/Managed/Files/MathfEx.cs#L18|title=गोडोट MathfEx.cs|website=GitHub.com}}</ref>  अन्य सामान्य तकनीक यूएलपी है, जो जांच करती है कि अंतिम स्थान के अंकों में क्या अंतर है, प्रभावी ढंग से जांचती है कि दोनों मान कितने कदम दूर हैं।<ref>{{cite web|url=https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/|title=Comparing Floating Point Numbers, 2012 Edition|website=randomascii.wordpress.com|date=26 February 2012 }}</ref>
फ़्लोटिंग पॉइंट गणनाओं में निहित राउंडिंग त्रुटियाँ परिणामों की त्रुटिहीन समानता की जाँच के लिए तुलनाओं के उपयोग को सीमित कर सकती हैं। स्वीकार्य सीमा चुनना  जटिल विषय है। अनुमानित तुलना करने के लिए तुलनात्मक ईपीएसलॉन मान का उपयोग करना  सामान्य तकनीक है।<ref>{{cite web|url=https://github.com/godotengine/godot/blob/master/core/math/math_funcs.h#L302|title=Godot math_funcs.h|website=GitHub.com|date=30 July 2022 }}</ref> तुलनाएँ कितनी उदार हैं, इसके आधार पर सामान्य मूल्यों में सम्मिलित हैं <code>1e-6</code> या <code>1e-5</code> ल परिशुद्धता के लिए, और <code>1e-14</code> दोहरी परिशुद्धता के लिए.<ref>{{cite web|url=https://github.com/godotengine/godot/blob/master/core/math/math_defs.h#L34|title=Godot math_defs.h|website=GitHub.com|date=30 July 2022 }}</ref><ref>{{cite web|url=https://github.com/godotengine/godot/blob/master/modules/mono/glue/Managed/Files/MathfEx.cs#L18|title=गोडोट MathfEx.cs|website=GitHub.com}}</ref>  अन्य सामान्य तकनीक यूएलपी है, जो जांच करती है कि अंतिम स्थान के अंकों में क्या अंतर है, प्रभावी ढंग से जांचती है कि दोनों मान कितने कदम दूर हैं।<ref>{{cite web|url=https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/|title=Comparing Floating Point Numbers, 2012 Edition|website=randomascii.wordpress.com|date=26 February 2012 }}</ref>
हालाँकि तुलनात्मक उद्देश्यों के लिए नकारात्मक शून्य और सकारात्मक शून्य को सामान्यतः समान माना जाता है, कुछ [[प्रोग्रामिंग भाषा]] [[रिलेशनल ऑपरेटर]] और समान निर्माण उन्हें अलग मानते हैं। [[जावा (प्रोग्रामिंग भाषा)]] भाषा विशिष्टता के अनुसार,<ref>{{cite web|url=http://java.sun.com/docs/books/jls/|title=जावा भाषा और वर्चुअल मशीन विशिष्टताएँ|website=Java Documentation}}</ref> तुलना और समानता संचालक उन्हें समान मानते हैं, लेकिन <code>Math.min()</code> और <code>Math.max()</code> उन्हें अलग करें (आधिकारिक तौर पर जावा संस्करण 1.1 से शुरू करें लेकिन वास्तव में 1.1.1 से), जैसा कि तुलना विधियां करती हैं <code>equals()</code>, <code>compareTo()</code> और भी <code>compare()</code> कक्षाओं का <code>Float</code> और <code>Double</code>.
चूँकि तुलनात्मक उद्देश्यों के लिए नकारात्मक शून्य और सकारात्मक शून्य को सामान्यतः समान माना जाता है, कुछ [[प्रोग्रामिंग भाषा]] [[रिलेशनल ऑपरेटर]] और समान निर्माण उन्हें अलग मानते हैं। [[जावा (प्रोग्रामिंग भाषा)]] भाषा विशिष्टता के अनुसार,<ref>{{cite web|url=http://java.sun.com/docs/books/jls/|title=जावा भाषा और वर्चुअल मशीन विशिष्टताएँ|website=Java Documentation}}</ref> तुलना और समानता संचालक उन्हें समान मानते हैं, लेकिन <code>Math.min()</code> और <code>Math.max()</code> उन्हें अलग करें (आधिकारिक तौर पर जावा संस्करण 1.1 से शुरू करें लेकिन वास्तव में 1.1.1 से), जैसा कि तुलना विधियां करती हैं <code>equals()</code>, <code>compareTo()</code> और भी <code>compare()</code> कक्षाओं का <code>Float</code> और <code>Double</code>.


==फ़्लोटिंग-पॉइंट संख्याओं को पूर्णांकित करना==
==फ़्लोटिंग-पॉइंट संख्याओं को पूर्णांकित करना==
Line 370: Line 370:


==वास्तविक संख्याओं का विस्तार==
==वास्तविक संख्याओं का विस्तार==
आईईईई मानक अलग-अलग सकारात्मक और नकारात्मक अनन्तताओं के साथ, पूर्ण रूप से विस्तारित वास्तविक संख्या प्रणाली को नियोजित (और विस्तारित) करता है। प्रारूपण के दौरान, प्रोग्रामर को  मोड चयन विकल्प प्रदान करके, ल अहस्ताक्षरित अनंत के साथ प्रोजेक्टिवली विस्तारित वास्तविक संख्या प्रणाली को सम्मिलित करने के लिए मानक का प्रस्ताव था। हालाँकि, अंतिम मानक की जटिलता को कम करने के हित में, प्रोजेक्टिव मोड को हटा दिया गया था। Intel 8087 और [[Intel 80287]] फ़्लोटिंग पॉइंट सह-प्रोसेसर दोनों इस प्रोजेक्टिव मोड का समर्थन करते हैं।<ref>{{cite journal|journal=ACM Transactions on Programming Languages and Systems|volume=18|issue=2|date=March 1996|format=PDF|url=http://www.jhauser.us/publications/1996_Hauser_FloatingPointExceptions.html|author=John R. Hauser|title=संख्यात्मक कार्यक्रमों में फ़्लोटिंग-पॉइंट अपवादों को संभालना|doi=10.1145/227699.227701|pages=139–174|s2cid=9820157}}</ref><ref>{{cite journal|title=IEEE Task P754: A proposed standard for binary floating-point arithmetic|date=March 1981|journal=IEEE Computer|volume=14|issue=3|pages=51–62|author=David Stevenson|doi=10.1109/C-M.1981.220377|s2cid=15523399 }}</ref><ref>{{cite journal|author= William Kahan and John Palmer|year=1979|title=प्रस्तावित फ़्लोटिंग-पॉइंट मानक पर|journal=SIGNUM Newsletter|volume=14|issue=Special|pages=13–21|doi= 10.1145/1057520.1057522|s2cid=16981715}}</ref>
आईईईई मानक अलग-अलग सकारात्मक और नकारात्मक अनन्तताओं के साथ, पूर्ण रूप से विस्तारित वास्तविक संख्या प्रणाली को नियोजित (और विस्तारित) करता है। प्रारूपण के दौरान, प्रोग्रामर को  मोड चयन विकल्प प्रदान करके, ल अहस्ताक्षरित अनंत के साथ प्रोजेक्टिवली विस्तारित वास्तविक संख्या प्रणाली को सम्मिलित करने के लिए मानक का प्रस्ताव था। चूँकि, अंतिम मानक की जटिलता को कम करने के हित में, प्रोजेक्टिव मोड को हटा दिया गया था। Intel 8087 और [[Intel 80287]] फ़्लोटिंग पॉइंट सह-प्रोसेसर दोनों इस प्रोजेक्टिव मोड का समर्थन करते हैं।<ref>{{cite journal|journal=ACM Transactions on Programming Languages and Systems|volume=18|issue=2|date=March 1996|format=PDF|url=http://www.jhauser.us/publications/1996_Hauser_FloatingPointExceptions.html|author=John R. Hauser|title=संख्यात्मक कार्यक्रमों में फ़्लोटिंग-पॉइंट अपवादों को संभालना|doi=10.1145/227699.227701|pages=139–174|s2cid=9820157}}</ref><ref>{{cite journal|title=IEEE Task P754: A proposed standard for binary floating-point arithmetic|date=March 1981|journal=IEEE Computer|volume=14|issue=3|pages=51–62|author=David Stevenson|doi=10.1109/C-M.1981.220377|s2cid=15523399 }}</ref><ref>{{cite journal|author= William Kahan and John Palmer|year=1979|title=प्रस्तावित फ़्लोटिंग-पॉइंट मानक पर|journal=SIGNUM Newsletter|volume=14|issue=Special|pages=13–21|doi= 10.1145/1057520.1057522|s2cid=16981715}}</ref>


== कार्य और विधेय ==
== कार्य और विधेय ==
Line 397: Line 397:
1976 में, [[इंटेल]]  फ्लोटिंग-पॉइंट [[ सह प्रोसेसर ]] का विकास शुरू कर रहा था।<ref name="Intel_2016_Case"/><ref name="Kahan_1998_Story"/>इंटेल को उम्मीद थी कि वह व्यापक रूप से भिन्न गणित सॉफ्टवेयर लाइब्रेरी में पाए जाने वाले सभी ऑपरेशनों के अच्छे कार्यान्वयन वाली  चिप बेचने में सक्षम होगी।<ref name="Intel_2016_Case"/><ref name="Woehr_1997_Kahan"/>
1976 में, [[इंटेल]]  फ्लोटिंग-पॉइंट [[ सह प्रोसेसर ]] का विकास शुरू कर रहा था।<ref name="Intel_2016_Case"/><ref name="Kahan_1998_Story"/>इंटेल को उम्मीद थी कि वह व्यापक रूप से भिन्न गणित सॉफ्टवेयर लाइब्रेरी में पाए जाने वाले सभी ऑपरेशनों के अच्छे कार्यान्वयन वाली  चिप बेचने में सक्षम होगी।<ref name="Intel_2016_Case"/><ref name="Woehr_1997_Kahan"/>


जॉन पामर, जिन्होंने इस परियोजना का प्रबंधन किया था, का मानना ​​था कि इस प्रयास को अलग-अलग प्रोसेसरों में  मानक ीकृत फ़्लोटिंग पॉइंट संचालन द्वारा समर्थित किया जाना चाहिए। उन्होंने [[कैलिफोर्निया विश्वविद्यालय]] के [[विलियम कहाँ]] से संपर्क किया, जिन्होंने [[ हेवलेट पैकर्ड ]] के कैलकुलेटर की त्रुटिहीनता में सुधार करने में मदद की थी। कहन ने सुझाव दिया कि इंटेल [[ डिजिटल उपकरण निगम ]] (DEC) VAX के फ्लोटिंग पॉइंट का उपयोग करे। पहला VAX, VAX-11/780 1977 के अंत में सामने आया था, और इसके फ्लोटिंग पॉइंट को अत्यधिक महत्व दिया गया था। हालाँकि, अपनी चिप को व्यापक संभव बाज़ार में बेचने की कोशिश में, इंटेल सबसे अच्छा फ़्लोटिंग पॉइंट चाहता था, और कहन ने विशिष्टताओं को तैयार किया।<ref name="Intel_2016_Case"/>कहन ने शुरू में सिफारिश की थी कि फ़्लोटिंग पॉइंट आधार दशमलव हो<ref>W. Kahan 2003, pers. comm. to [[Mike Cowlishaw]] and others after an IEEE 754 meeting</ref>{{unreliable source?|date=October 2016}} लेकिन कोप्रोसेसर का हार्डवेयर डिज़ाइन उस परिवर्तन को करने के लिए बहुत दूर था।
जॉन पामर, जिन्होंने इस परियोजना का प्रबंधन किया था, का मानना ​​था कि इस प्रयास को अलग-अलग प्रोसेसरों में  मानक ीकृत फ़्लोटिंग पॉइंट संचालन द्वारा समर्थित किया जाना चाहिए। उन्होंने [[कैलिफोर्निया विश्वविद्यालय]] के [[विलियम कहाँ]] से संपर्क किया, जिन्होंने [[ हेवलेट पैकर्ड ]] के कैलकुलेटर की त्रुटिहीनता में सुधार करने में मदद की थी। कहन ने सुझाव दिया कि इंटेल [[ डिजिटल उपकरण निगम ]] (DEC) VAX के फ्लोटिंग पॉइंट का उपयोग करे। पहला VAX, VAX-11/780 1977 के अंत में सामने आया था, और इसके फ्लोटिंग पॉइंट को अत्यधिक महत्व दिया गया था। चूँकि, अपनी चिप को व्यापक संभव बाज़ार में बेचने की कोशिश में, इंटेल सबसे अच्छा फ़्लोटिंग पॉइंट चाहता था, और कहन ने विशिष्टताओं को तैयार किया।<ref name="Intel_2016_Case"/>कहन ने शुरू में सिफारिश की थी कि फ़्लोटिंग पॉइंट आधार दशमलव हो<ref>W. Kahan 2003, pers. comm. to [[Mike Cowlishaw]] and others after an IEEE 754 meeting</ref>{{unreliable source?|date=October 2016}} लेकिन कोप्रोसेसर का हार्डवेयर डिज़ाइन उस परिवर्तन को करने के लिए बहुत दूर था।


इंटेल के भीतर के काम ने अन्य विक्रेताओं को चिंतित कर दिया, जिन्होंने समान अवसर सुनिश्चित करने के लिए मानकीकरण प्रयास स्थापित किया। कहन ने नवंबर 1977 में आयोजित दूसरी आईईईई 754 मानक कार्य समूह की बैठक में भाग लिया। बाद में उन्हें इंटेल से उनके कोप्रोसेसर के लिए उनके काम के आधार पर  मसौदा प्रस्ताव पेश करने की अनुमति मिली; उन्हें प्रारूप के विवरण और उसके औचित्य को समझाने की अनुमति दी गई थी, लेकिन इंटेल के कार्यान्वयन वास्तुकला से संबंधित कुछ भी नहीं। मसौदा जेरोम कूनन और हेरोल्ड एस. स्टोन के साथ सह-लिखा गया था, और शुरू में इसे काहन-कूनन-स्टोन प्रस्ताव या के-सी-एस प्रारूप के रूप में जाना जाता था।<ref name="Intel_2016_Case"/><ref name="Kahan_1998_Story"/><ref name="Woehr_1997_Kahan"/><ref name="Chuck_Kahan_Interview"/>
इंटेल के भीतर के काम ने अन्य विक्रेताओं को चिंतित कर दिया, जिन्होंने समान अवसर सुनिश्चित करने के लिए मानकीकरण प्रयास स्थापित किया। कहन ने नवंबर 1977 में आयोजित दूसरी आईईईई 754 मानक कार्य समूह की बैठक में भाग लिया। बाद में उन्हें इंटेल से उनके कोप्रोसेसर के लिए उनके काम के आधार पर  मसौदा प्रस्ताव पेश करने की अनुमति मिली; उन्हें प्रारूप के विवरण और उसके औचित्य को समझाने की अनुमति दी गई थी, लेकिन इंटेल के कार्यान्वयन वास्तुकला से संबंधित कुछ भी नहीं। मसौदा जेरोम कूनन और हेरोल्ड एस. स्टोन के साथ सह-लिखा गया था, और शुरू में इसे काहन-कूनन-स्टोन प्रस्ताव या के-सी-एस प्रारूप के रूप में जाना जाता था।<ref name="Intel_2016_Case"/><ref name="Kahan_1998_Story"/><ref name="Woehr_1997_Kahan"/><ref name="Chuck_Kahan_Interview"/>

Revision as of 15:55, 12 August 2023

आईईईई 754-1985[1] कंप्यूटर में फ्लोटिंग-पॉइंट नंबरों का प्रतिनिधित्व करने के लिए उद्योग मानक था, जिसे सामान्यतः 1985 में स्वीकार किया गया था और 2008 में आईईईई 754-2008 द्वारा प्रतिस्थापित किया गया था, और फिर 2019 में सामान्य संशोधन आईईईई 754-2019 द्वारा प्रतिस्थापित किया गया था।[2] अपने 23 वर्षों के समय, यह फ़्लोटिंग-पॉइंट गणना के लिए सबसे व्यापक रूप से उपयोग किया जाने वाला प्रारूप था। इसे सॉफ़्टवेयर में, फ़्लोटिंग-पॉइंट लाइब्रेरीज़ के रूप में, और हार्डवेयर में, कई सीपीयू और एफपीयू के निर्देशों में प्रस्तावित किया गया था। आईईईई 754-1985 बनने वाले उपाय को प्रस्तावित करने वाला प्रथम एकीकृत सर्किट इंटेल 8087 था।

आईईईई 754-1985 बाइनरी में संख्याओं का प्रतिनिधित्व करता है, जो परिशुद्धता के चार स्तरों की परिभाषा प्रदान करता है, जिनमें से दो सबसे अधिक उपयोग किए जाते हैं:

लेवल विड्थ पूर्ण त्रुटिहीनता से रेंज करें त्रुटिहीनता[lower-alpha 1]
एकल त्रुटिहीनता 32 bits ±1.18×10−38 to ±3.4×1038 लगभग 7 दशमलव अंक
दोगुना त्रुटिहीनता 64 bits ±2.23×10−308 to ±1.80×10308 लगभग 16 दशमलव अंक

मानक सकारात्मक और नकारात्मक अनंत के लिए प्रतिनिधित्व को भी परिभाषित करता है, नकारात्मक शून्य, शून्य से विभाजन जैसे अमान्य परिणामों को संभालने के लिए पांच अपवाद, उन अपवादों का प्रतिनिधित्व करने के लिए विशेष मान जिन्हें NaN कहा जाता है, ऊपर दिखाए गए छोटी संख्याओं का प्रतिनिधित्व करने के लिए असामान्य संख्याएं, और चार गोल मोड है।

संख्याओं का प्रतिनिधित्व

File:IEEE 754 Single Floating Point Format.svg
संख्या 0.15625 को ल-त्रुटिहीन आईईईई 754-1985 फ़्लोटिंग-पॉइंट संख्या के रूप में दर्शाया गया है। स्पष्टीकरण के लिए पाठ देखें.
File:IEEE 754 Double Floating Point Format.svg
64 बिट आईईईई 754 में तीन फ़ील्ड फ़्लोट होते हैं

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

दशमलव संख्या 0.1562510 बाइनरी में दर्शाया गया 0.00101 है2 (अर्थात् 1/8 + 1/32)। (अंकाक्षर संख्या मूलांक दर्शाते हैं।) वैज्ञानिक संकेतन के अनुरूप, जहां संख्याओं को दशमलव बिंदु के बाईं ओर गैर-शून्य अंक के रूप में लिखा जाता है, हम इस संख्या को फिर से लिखते हैं ताकि इसमें बाइनरी के बाईं ओर ल 1 बिट हो बिंदु । हम तीन स्थितियों द्वारा छोड़े गए बिट्स के स्थानांतरण की भरपाई के लिए बस 2 की उचित शक्ति से गुणा करते हैं:

अब हम भिन्न और घातांक को पढ़ सकते हैं: भिन्न .01 है2 और घातांक −3 है।

जैसा कि चित्रों में दिखाया गया है, आईईईई 754 में इस संख्या का प्रतिनिधित्व करने वाले तीन फ़ील्ड हैं:

चिन्ह = 0, क्योंकि संख्या धनात्मक है। (1 नकारात्मक दर्शाता है।)
पक्षपाती घातांक = −3 + पूर्वाग्रह। 'ल परिशुद्धता' में, पूर्वाग्रह '127' है, इसलिए इस उदाहरण में पक्षपाती घातांक 124 है; 'डबल प्रिसिजन' में, पूर्वाग्रह '1023' है, इसलिए इस उदाहरण में पक्षपाती घातांक 1020 है।
भिन्न = .01000…2.

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

अग्रणी 1 बिट को हटा दिया गया है क्योंकि शून्य को छोड़कर सभी संख्याएँ अग्रणी 1 से शुरू होती हैं; अग्रणी 1 अंतर्निहित है और वास्तव में इसे संग्रहीत करने की आवश्यकता नहीं है जो मुफ़्त में अतिरिक्त परिशुद्धता देता है।

शून्य

शून्य संख्या को विशेष रूप से दर्शाया गया है:

हस्ताक्षरित शून्य के लिए चिह्न = 0, हस्ताक्षरित शून्य के लिए 1।
पक्षपाती घातांक = 0.
भिन्न = 0.

असामान्यीकृत संख्याएँ

ऊपर वर्णित संख्या निरूपण को सामान्यीकृत कहा जाता है, जिसका अर्थ है कि अंतर्निहित अग्रणी बाइनरी अंक 1 है। अंकगणितीय अंडरफ्लो होने पर परिशुद्धता के नुकसान को कम करने के लिए, आईईईई 754 में सामान्यीकृत प्रतिनिधित्व में संभव से छोटे अंशों का प्रतिनिधित्व करने की क्षमता सम्मिलित है। अंतर्निहित अग्रणी अंक को 0 बनाना। ऐसी संख्याओं को असामान्य संख्याएँ कहा जाता है। उनमें सामान्यीकृत संख्या जितने महत्वपूर्ण अंक सम्मिलित नहीं होते हैं, लेकिन जब फ़्लोटिंग-पॉइंट अंकगणित # फ़्लोटिंग-पॉइंट ऑपरेशंस का परिणाम बिल्कुल शून्य नहीं होता है, लेकिन शून्य के बहुत करीब होता है, तो वे परिशुद्धता के क्रमिक नुकसान को सक्षम करते हैं। सामान्यीकृत संख्या.

असामान्य संख्या को सभी 0 बिट्स के पक्षपाती घातांक के साथ दर्शाया जाता है, जो ल परिशुद्धता में −126 के घातांक का प्रतिनिधित्व करता है (−127 नहीं), या दोहरी परिशुद्धता में −1022 (−1023 नहीं) का प्रतिनिधित्व करता है।[3] इसके विपरीत, सामान्य संख्या का प्रतिनिधित्व करने वाला सबसे छोटा पक्षपाती घातांक 1 है (नीचे #उदाहरण देखें)।

गैर-संख्याओं का प्रतिनिधित्व

किसी गणना की अनंतता या अमान्य परिणाम को इंगित करने के लिए पक्षपाती-प्रतिपादक फ़ील्ड सभी 1 बिट्स से भरा हुआ है।

सकारात्मक और नकारात्मक अनंत

विस्तारित वास्तविक रेखा को इस प्रकार दर्शाया गया है:

सकारात्मक अनंत के लिए चिह्न = 0, नकारात्मक अनंत के लिए 1।
पक्षपाती प्रतिपादक = सभी 1 बिट्स।
अंश = सभी 0 बिट्स।

NaN

फ़्लोटिंग-पॉइंट अंकगणित#फ़्लोटिंग-पॉइंट ऑपरेशंस|फ़्लोटिंग-पॉइंट अंकगणित के कुछ ऑपरेशन अमान्य हैं, जैसे ऋणात्मक संख्या का वर्गमूल लेना। किसी अमान्य परिणाम तक पहुंचने की क्रिया को फ़्लोटिंग-पॉइंट अपवाद कहा जाता है। असाधारण परिणाम को विशेष कोड द्वारा दर्शाया जाता है जिसे NaN कहा जाता है, संख्या नहीं के लिए। आईईईई 754-1985 में सभी NaN का प्रारूप यह है:

चिह्न = या तो 0 या 1.
पक्षपाती प्रतिपादक = सभी 1 बिट्स।
अंश = सभी 0 बिट्स को छोड़कर कुछ भी (क्योंकि सभी 0 बिट्स अनंत का प्रतिनिधित्व करते हैं)।

सीमा और परिशुद्धता

File:IEEE 754 relative precision.svg
महत्वपूर्ण अंकों की निश्चित संख्या का उपयोग करके दशमलव प्रतिनिधित्व की तुलना में ल (बाइनरी 32) और डबल त्रुटिहीन (बाइनरी 64) संख्याओं की सापेक्ष त्रुटिहीनता। सापेक्ष परिशुद्धता को यहां ulp(x)/x के रूप में परिभाषित किया गया है, जहां ulp(x) x के प्रतिनिधित्व में अंतिम स्थान पर इकाई है, अर्थात x और अगले प्रतिनिधित्व योग्य संख्या के बीच का अंतर।

परिशुद्धता को दो क्रमिक मंटिसा अभ्यावेदन के बीच न्यूनतम अंतर के रूप में परिभाषित किया गया है; इस प्रकार यह केवल मंटिसा में कार्य है; जबकि अंतर को दो क्रमिक संख्याओं के बीच के अंतर के रूप में परिभाषित किया गया है।[4]

ल परिशुद्धता

ल-त्रुटिहीन संख्याएँ 32 बिट्स पर कब्जा करती हैं। ल परिशुद्धता में:

  • शून्य के निकटतम सकारात्मक और नकारात्मक संख्याएं (घातक क्षेत्र में सभी 0 के साथ असामान्य मान और अंश क्षेत्र में बाइनरी मान 1 द्वारा दर्शायी जाती हैं) हैं
    ±2−23×2−126 ≈ ±1.40130×10−45
  • शून्य के निकटतम सकारात्मक और नकारात्मक सामान्यीकृत संख्याएं (घातक क्षेत्र में बाइनरी मान 1 और अंश क्षेत्र में 0 के साथ दर्शायी जाती हैं) हैं
    ±1 × 2−126 ≈ ±1.17549×10−38
  • शून्य से सबसे दूर की परिमित धनात्मक और परिमित ऋणात्मक संख्याएँ (घातक क्षेत्र में 254 और भिन्न क्षेत्र में सभी 1 के साथ मान द्वारा दर्शाई गई) हैं
    ±(2−2−23) × 2127[5] ≈ ±3.40282×1038

ल परिशुद्धता में दिए गए घातांक के लिए कुछ उदाहरण सीमा और अंतराल मान:

Actual Exponent (unbiased) Exp (biased) Minimum Maximum Gap
−1 126 0.5 ≈ 0.999999940395 ≈ 5.96046e-8
0 127 1 ≈ 1.999999880791 ≈ 1.19209e-7
1 128 2 ≈ 3.999999761581 ≈ 2.38419e-7
2 129 4 ≈ 7.999999523163 ≈ 4.76837e-7
10 137 1024 ≈ 2047.999877930 ≈ 1.22070e-4
11 138 2048 ≈ 4095.999755859 ≈ 2.44141e-4
23 150 8388608 16777215 1
24 151 16777216 33554430 2
127 254 ≈ 1.70141e38 ≈ 3.40282e38 ≈ 2.02824e31

उदाहरण के तौर पर, 16,777,217 को 32-बिट फ़्लोट के रूप में एन्कोड नहीं किया जा सकता क्योंकि इसे 16,777,216 पर पूर्णांकित किया जाएगा। इससे पता चलता है कि फ़्लोटिंग पॉइंट अंकगणित लेखांकन सॉफ़्टवेयर के लिए अनुपयुक्त क्यों है। चूँकि, प्रतिनिधित्व योग्य सीमा के भीतर सभी पूर्णांक जो 2 की शक्ति हैं, उन्हें बिना गोलाई के 32-बिट फ़्लोट में संग्रहीत किया जा सकता है।

दोहरी परिशुद्धता

डबल-त्रुटिहीन संख्याएँ 64 बिट्स पर कब्जा करती हैं। दोहरी परिशुद्धता में:

  • शून्य के निकटतम सकारात्मक और नकारात्मक संख्याएं (्सप फ़ील्ड में सभी 0 के साथ असामान्य मान और फ्रैक्शन फ़ील्ड में बाइनरी मान 1 द्वारा दर्शायी जाती हैं) हैं
    ±2−52×2−1022 ≈ ±4.94066×10−324
  • शून्य के निकटतम सकारात्मक और नकारात्मक सामान्यीकृत संख्याएं (्सप फ़ील्ड में बाइनरी मान 1 और अंश फ़ील्ड में 0 के साथ दर्शायी जाती हैं) हैं
    ±1 × 2−1022 ≈ ±2.22507×10−308
  • शून्य से सबसे दूर की परिमित धनात्मक और परिमित ऋणात्मक संख्याएँ (्सप फ़ील्ड में 2046 और भिन्न फ़ील्ड में सभी 1 के साथ मान द्वारा दर्शाई गई) हैं
    ±(2−2−52)×21023[5]≈ ±1.79769×10308

दोहरी परिशुद्धता में दिए गए घातांक के लिए कुछ उदाहरण सीमा और अंतराल मान:

Actual Exponent (unbiased) Exp (biased) Minimum Maximum Gap
−1 1022 0.5 ≈ 0.999999999999999888978 ≈ 1.11022e-16
0 1023 1 ≈ 1.999999999999999777955 ≈ 2.22045e-16
1 1024 2 ≈ 3.999999999999999555911 ≈ 4.44089e-16
2 1025 4 ≈ 7.999999999999999111822 ≈ 8.88178e-16
10 1033 1024 ≈ 2047.999999999999772626 ≈ 2.27374e-13
11 1034 2048 ≈ 4095.999999999999545253 ≈ 4.54747e-13
52 1075 4503599627370496 9007199254740991 1
53 1076 9007199254740992 18014398509481982 2
1023 2046 ≈ 8.98847e307 ≈ 1.79769e308 ≈ 1.99584e292

विस्तारित प्रारूप

मानक राउंड-ऑफ त्रुटियों को कम करने के लिए, अंतिम परिणाम के लिए आवश्यक उच्च परिशुद्धता पर आंतरिक गणना करने के लिए विस्तारित प्रारूप (ओं) का उपयोग करने की भी सिफारिश करता है: मानक केवल ऐसे प्रारूपों के लिए न्यूनतम परिशुद्धता और घातांक आवश्यकताओं को निर्दिष्ट करता है। x87 विस्तारित परिशुद्धता | 80-बिट विस्तारित प्रारूप सबसे सामान्यतः लागू किया जाने वाला विस्तारित प्रारूप है जो इन आवश्यकताओं को पूरा करता है।

उदाहरण

यहां ल-त्रुटिहीन आईईईई 754 अभ्यावेदन के कुछ उदाहरण दिए गए हैं:

Type Sign Actual Exponent Exp (biased) Exponent field Fraction field Value
Zero 0 −126 0 0000 0000 000 0000 0000 0000 0000 0000 0.0
Negative zero 1 −126 0 0000 0000 000 0000 0000 0000 0000 0000 −0.0
One 0 0 127 0111 1111 000 0000 0000 0000 0000 0000 1.0
Minus One 1 0 127 0111 1111 000 0000 0000 0000 0000 0000 −1.0
Smallest denormalized number * −126 0 0000 0000 000 0000 0000 0000 0000 0001 ±2−23 × 2−126 = ±2−149 ≈ ±1.4×10