आईईईई 754-1985: Difference between revisions
No edit summary |
No edit summary |
||
| Line 78: | Line 78: | ||
: अपूर्णांक = सभी 0 बिट्स को छोड़कर कुछ भी होता है (क्योंकि सभी 0 बिट्स अनंत का प्रतिनिधित्व करते हैं)। | : अपूर्णांक = सभी 0 बिट्स को छोड़कर कुछ भी होता है (क्योंकि सभी 0 बिट्स अनंत का प्रतिनिधित्व करते हैं)। | ||
== | == श्रेणी और त्रुटिहीनता == | ||
[[File:IEEE 754 relative precision.svg|thumb|महत्वपूर्ण अंकों की निश्चित संख्या का उपयोग करके दशमलव प्रतिनिधित्व की तुलना में ल (बाइनरी 32) और डबल त्रुटिहीन (बाइनरी 64) संख्याओं की सापेक्ष त्रुटिहीनता। सापेक्ष त्रुटिहीनता को यहां ulp(x)/x के रूप में परिभाषित किया गया है, जहां ulp(x) x के प्रतिनिधित्व में [[अंतिम स्थान पर इकाई]] है, अर्थात x और अगले प्रतिनिधित्व योग्य संख्या के मध्यका अंतर।]]त्रुटिहीनता को दो क्रमिक मंटिसा अभ्यावेदन के | [[File:IEEE 754 relative precision.svg|thumb|महत्वपूर्ण अंकों की निश्चित संख्या का उपयोग करके दशमलव प्रतिनिधित्व की तुलना में ल (बाइनरी 32) और डबल त्रुटिहीन (बाइनरी 64) संख्याओं की सापेक्ष त्रुटिहीनता। सापेक्ष त्रुटिहीनता को यहां ulp(x)/x के रूप में परिभाषित किया गया है, जहां ulp(x) x के प्रतिनिधित्व में [[अंतिम स्थान पर इकाई]] है, अर्थात x और अगले प्रतिनिधित्व योग्य संख्या के मध्यका अंतर।]]त्रुटिहीनता को दो क्रमिक मंटिसा अभ्यावेदन के मध्य न्यूनतम अंतर के रूप में परिभाषित किया गया है; इस प्रकार यह केवल मंटिसा में फंक्शन है; जबकि अंतर को दो क्रमिक संख्याओं के मध्य के अंतर के रूप में परिभाषित किया गया है।<ref>{{citation |title=Computer Arithmetic |author1=Hossam A. H. Fahmy |author2=Shlomo Waser |author3=Michael J. Flynn |url=http://arith.stanford.edu/~hfahmy/webpages/arith_class/arith.pdf |access-date=2011-01-02 |url-status=dead |archive-url=https://web.archive.org/web/20101008203307/http://arith.stanford.edu/~hfahmy/webpages/arith_class/arith.pdf |archive-date=2010-10-08}}</ref> | ||
[[एकल परिशुद्धता|''' | [[एकल परिशुद्धता|'''एकल त्रुटिहीनता''']] | ||
एकल-त्रुटिहीन संख्याएँ 32 बिट्स पर व्याप्त हैं। एकल त्रुटिहीनता में: | |||
* शून्य के निकटतम सकारात्मक और नकारात्मक संख्याएं (घातक क्षेत्र में सभी 0 के साथ असामान्य मान और अंश क्षेत्र में बाइनरी मान 1 द्वारा दर्शायी जाती हैं) हैं | * शून्य के निकटतम सकारात्मक और नकारात्मक संख्याएं (घातक क्षेत्र में सभी 0 के साथ असामान्य मान और अंश क्षेत्र में बाइनरी मान 1 द्वारा दर्शायी जाती हैं) हैं: | ||
*: ±2<sup>−23</sup>×2<sup>−126</sup> ≈ ±1.40130{{e|−45}} | *: ±2<sup>−23</sup>×2<sup>−126</sup> ≈ ±1.40130{{e|−45}} | ||
* शून्य के निकटतम सकारात्मक और नकारात्मक सामान्यीकृत संख्याएं (घातक क्षेत्र में बाइनरी मान 1 और अंश क्षेत्र में 0 के साथ दर्शायी जाती हैं) हैं | * शून्य के निकटतम सकारात्मक और नकारात्मक सामान्यीकृत संख्याएं (घातक क्षेत्र में बाइनरी मान 1 और अंश क्षेत्र में 0 के साथ दर्शायी जाती हैं) हैं: | ||
*: ±1 × 2<sup>−126</sup> ≈ ±1.17549{{e|−38}} | *: ±1 × 2<sup>−126</sup> ≈ ±1.17549{{e|−38}} | ||
* शून्य से सबसे दूर की परिमित धनात्मक और परिमित ऋणात्मक संख्याएँ (घातक क्षेत्र में 254 और भिन्न क्षेत्र में सभी 1 के साथ मान द्वारा दर्शाई गई) हैं | * शून्य से सबसे दूर की परिमित धनात्मक और परिमित ऋणात्मक संख्याएँ (घातक क्षेत्र में 254 और भिन्न क्षेत्र में सभी 1 के साथ मान द्वारा दर्शाई गई) हैं: | ||
*: ±(2−2<sup>−23</sup>) × 2<sup>127</sup><ref name="Kahan">{{Cite document | *: ±(2−2<sup>−23</sup>) × 2<sup>127</sup><ref name="Kahan">{{Cite document | ||
| author = William Kahan |author-link=William Kahan | | author = William Kahan |author-link=William Kahan | ||
| Line 97: | Line 97: | ||
| access-date = 2007-04-12 }}</ref> ≈ ±3.40282{{e|38}} | | access-date = 2007-04-12 }}</ref> ≈ ±3.40282{{e|38}} | ||
एकल त्रुटिहीनता में दिए गए घातांक के लिए कुछ उदाहरण सीमा और अंतराल मान है: | |||
{| class="wikitable" style="text-align:right;" | {| class="wikitable" style="text-align:right;" | ||
| Line 161: | Line 161: | ||
| ≈ 2.02824e31 | | ≈ 2.02824e31 | ||
|} | |} | ||
उदाहरण के | उदाहरण के लिए, 16,777,217 को 32-बिट फ़्लोट के रूप में एन्कोड नहीं किया जा सकता क्योंकि इसे 16,777,216 पर पूर्णांकित किया जाएगा। इससे ज्ञात होता है कि फ़्लोटिंग पॉइंट अंकगणित लेखांकन सॉफ़्टवेयर के लिए अनुपयुक्त क्यों है। चूँकि, प्रतिनिधित्व योग्य सीमा के अंदर सभी पूर्णांक जो 2 की शक्ति हैं, उन्हें बिना गोलाई के 32-बिट फ़्लोट में संग्रहीत किया जा सकता है। | ||
=== दोहरी | === दोहरी त्रुटिहीनता === | ||
डबल-त्रुटिहीन संख्याएँ 64 बिट्स पर | डबल-त्रुटिहीन संख्याएँ 64 बिट्स पर व्याप्त हैं। दोहरी त्रुटिहीनता में: | ||
* शून्य के निकटतम सकारात्मक और नकारात्मक संख्याएं (्सप क्षेत्र में सभी 0 के साथ असामान्य मान और फ्रैक्शन क्षेत्र में बाइनरी मान 1 द्वारा दर्शायी जाती हैं) हैं | * शून्य के निकटतम सकारात्मक और नकारात्मक संख्याएं (्सप क्षेत्र में सभी 0 के साथ असामान्य मान और फ्रैक्शन क्षेत्र में बाइनरी मान 1 द्वारा दर्शायी जाती हैं) हैं | ||
*: ±2<sup>−52</sup>×2<sup>−1022</sup> ≈ ±4.94066{{e|−324}} | *: ±2<sup>−52</sup>×2<sup>−1022</sup> ≈ ±4.94066{{e|−324}} | ||
* शून्य के निकटतम सकारात्मक और नकारात्मक सामान्यीकृत संख्याएं ( | * शून्य के निकटतम सकारात्मक और नकारात्मक सामान्यीकृत संख्याएं (एक्सप क्षेत्र में बाइनरी मान 1 और अंश क्षेत्र में 0 के साथ दर्शायी जाती हैं) हैं: | ||
*: ±1 × 2<sup>−1022</sup> ≈ ±2.22507{{e|−308}} | *: ±1 × 2<sup>−1022</sup> ≈ ±2.22507{{e|−308}} | ||
* शून्य से सबसे दूर की परिमित धनात्मक और परिमित ऋणात्मक संख्याएँ ( | * शून्य से सबसे दूर की परिमित धनात्मक और परिमित ऋणात्मक संख्याएँ (एक्सप क्षेत्र में 2046 और भिन्न क्षेत्र में सभी 1 के साथ मान द्वारा दर्शाई गई) हैं: | ||
*: ±(2−2<sup>−52</sup>)×2<sup>1023</sup><ref name="Kahan" />≈ ±1.79769{{e|308}} | *: ±(2−2<sup>−52</sup>)×2<sup>1023</sup><ref name="Kahan" />≈ ±1.79769{{e|308}} | ||
दोहरी त्रुटिहीनता में दिए गए घातांक के लिए कुछ उदाहरण सीमा और अंतराल मान: | दोहरी त्रुटिहीनता में दिए गए घातांक के लिए कुछ उदाहरण सीमा और अंतराल मान है: | ||
{| class="wikitable" style="text-align:right;" | {| class="wikitable" style="text-align:right;" | ||
| Line 240: | Line 240: | ||
'''विस्तारित प्रारूप''' | '''विस्तारित प्रारूप''' | ||
मानक राउंड-ऑफ त्रुटियों को कम करने के लिए, अंतिम परिणाम के लिए आवश्यक उच्च त्रुटिहीनता पर आंतरिक गणना करने के लिए विस्तारित प्रारूप | मानक राउंड-ऑफ त्रुटियों को कम करने के लिए, अंतिम परिणाम के लिए आवश्यक उच्च त्रुटिहीनता पर आंतरिक गणना करने के लिए विस्तारित प्रारूप का उपयोग करने का अनुरोध करता है: मानक केवल ऐसे प्रारूपों के लिए न्यूनतम त्रुटिहीनता और घातांक आवश्यकताओं को निर्दिष्ट करता है। [[x87]] 80-बिट विस्तारित प्रारूप सबसे अधिक कार्यान्वित विस्तारित प्रारूप है जो इन आवश्यकताओं को पूर्ण करता है। | ||
== उदाहरण == | == उदाहरण == | ||
Revision as of 19:49, 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 कहा जाता है, ऊपर दिखाए गए छोटी संख्याओं का प्रतिनिधित्व करने के लिए असामान्य संख्याएं, और चार गोल मोड है।
संख्याओं का प्रतिनिधित्व
आईईईई 754 प्रारूप में फ़्लोटिंग-पॉइंट नंबरों में तीन क्षेत्र होते हैं: साइन बिट, बायस्ड घातांक और अंश। निम्नलिखित उदाहरण प्रत्येक का अर्थ बताता है।
दशमलव संख्या 0.1562510 बाइनरी में 0.001012 (अर्थात् 1/8 + 1/32) दर्शाया गया है। (अंकाक्षर संख्या मूलांक दर्शाते हैं।) वैज्ञानिक संकेतन के अनुरूप, जहां संख्याओं को दशमलव बिंदु के बाईं ओर गैर-शून्य अंक के रूप में लिखा जाता है, हम इस संख्या को पुनः लिखते हैं जिससे कि इसमें बाइनरी बिंदु के बाईं ओर एकल 1 बिट होता है। हम तीन स्थितियों द्वारा त्यागे गए बिट्स के स्थानांतरण की पूर्ति के लिए 2 की उचित शक्ति से गुणा करते हैं:
अब हम भिन्न और घातांक को पढ़ सकते हैं: भिन्न .012 है और घातांक −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 बिट्स अनंत का प्रतिनिधित्व करते हैं)।
श्रेणी और त्रुटिहीनता
त्रुटिहीनता को दो क्रमिक मंटिसा अभ्यावेदन के मध्य न्यूनतम अंतर के रूप में परिभाषित किया गया है; इस प्रकार यह केवल मंटिसा में फंक्शन है; जबकि अंतर को दो क्रमिक संख्याओं के मध्य के अंतर के रूप में परिभाषित किया गया है।[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
एकल त्रुटिहीनता में दिए गए घातांक के लिए कुछ उदाहरण सीमा और अंतराल मान है:
| वास्तविक घातांक (अनबायस्ड) | घातांक (बायस्ड) | न्यूनतम | अधिकतम | गैप |
|---|---|---|---|---|
| −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
दोहरी त्रुटिहीनता में दिए गए घातांक के लिए कुछ उदाहरण सीमा और अंतराल मान है:
| वास्तविक घातांक (अनबायस्ड) | घातांक (बायस्ड) | न्यूनतम | अधिकतम | गैप |
|---|---|---|---|---|
| −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−45 |
| "Middle" denormalized number | * | −126 | 0 | 0000 0000 | 100 0000 0000 0000 0000 0000 | ±2−1 × 2−126 = ±2−127 ≈ ±5.88×10−39 |
| Largest denormalized number | * | −126 | 0 | 0000 0000 | 111 1111 1111 1111 1111 1111 | ±(1−2−23) × 2−126 ≈ ±1.18×10−38 |
| Smallest normalized number | * | −126 | 1 | 0000 0001 | 000 0000 0000 0000 0000 0000 | ±2−126 ≈ ±1.18×10−38 |
| Largest normalized number | * | 127 | 254 | 1111 1110 | 111 1111 1111 1111 1111 1111 | ±(2−2−23) × 2127 ≈ ±3.4×1038 |
| Positive infinity | 0 | 128 | 255 | 1111 1111 | 000 0000 0000 0000 0000 0000 | +∞ |
| Negative infinity | 1 | 128 | 255 | 1111 1111 | 000 0000 0000 0000 0000 0000 | −∞ |
| Not a number | * | 128 | 255 | 1111 1111 | non zero | NaN |
| * Sign bit can be either 0 or 1 . | ||||||
फ़्लोटिंग-पॉइंट संख्याओं की तुलना करना
ऋणात्मक शून्य और धनात्मक शून्य के लिए बिट्स के दो संयोजनों को छोड़कर, प्रत्येक संभावित बिट संयोजन या तो NaN है या संबद्ध क्रम के साथ एफ़िनली विस्तारित वास्तविक संख्या प्रणाली में अद्वितीय मान वाला नंबर है, जिस पर कभी-कभी विशेष ध्यान देने की आवश्यकता होती है (नीचे देखें) . #Repretation_of_numbers में विशेष गुण है कि, NaN को छोड़कर, किसी भी दो संख्याओं की तुलना चिह्न और परिमाण पूर्णांक के रूप में की जा सकती है (endianness मुद्दे लागू होते हैं)। 2 के पूरक पूर्णांकों के रूप में तुलना करते समय: यदि साइन बिट भिन्न होते हैं, तो नकारात्मक संख्या सकारात्मक संख्या से पहले होती है, इसलिए 2 का पूरक सही परिणाम देता है (सिवाय इसके कि नकारात्मक शून्य और सकारात्मक शून्य को समान माना जाना चाहिए)। यदि दोनों मान सकारात्मक हैं, तो 2 की पूरक तुलना फिर से सही परिणाम देती है। अन्यथा (दो नकारात्मक संख्याएं), सही एफपी क्रम 2 के पूरक क्रम के विपरीत है।
फ़्लोटिंग पॉइंट गणनाओं में निहित राउंडिंग त्रुटियाँ परिणामों की त्रुटिहीन समानता की जाँच के लिए तुलनाओं के उपयोग को सीमित कर सकती हैं। स्वीकार्य सीमा चुनना जटिल विषय है। अनुमानित तुलना करने के लिए तुलनात्मक ईपीएसलॉन मान का उपयोग करना सामान्य तकनीक है।[6] तुलनाएँ कितनी उदार हैं, इसके आधार पर सामान्य मूल्यों में सम्मिलित हैं 1e-6 या 1e-5 ल त्रुटिहीनता के लिए, और 1e-14 दोहरी त्रुटिहीनता के लिए.[7][8] अन्य सामान्य तकनीक यूएलपी है, जो जांच करती है कि अंतिम स्थान के अंकों में क्या अंतर है, प्रभावी ढंग से जांचती है कि दोनों मान कितने कदम दूर हैं।[9]
चूँकि तुलनात्मक उद्देश्यों के लिए नकारात्मक शून्य और सकारात्मक शून्य को सामान्यतः समान माना जाता है, कुछ प्रोग्रामिंग भाषा रिलेशनल ऑपरेटर और समान निर्माण उन्हें अलग मानते हैं। जावा (प्रोग्रामिंग भाषा) भाषा विशिष्टता के अनुसार,[10] तुलना और समानता संचालक उन्हें समान मानते हैं, किन्तु Math.min() और Math.max() उन्हें अलग करें (आधिकारिक तौर पर जावा संस्करण 1.1 से शुरू करें किन्तु वास्तव में 1.1.1 से), जैसा कि तुलना विधियां करती हैं equals(), compareTo() और भी compare() कक्षाओं का Float और Double.
फ़्लोटिंग-पॉइंट संख्याओं को पूर्णांकित करना
आईईईई मानक में चार भिन्न-भिन्न राउंडिंग मोड हैं; पहला डिफ़ॉल्ट है; अन्य को निर्देशित गोलाई कहा जाता है।
- 'राउंड टू नियरेस्ट' - निकटतम मान तक राउंड; यदि संख्या मध्यमें गिरती है तो इसे सम (शून्य) कम से कम महत्वपूर्ण बिट के साथ निकटतम मान तक पूर्णांकित किया जाता है, जिसका अर्थ है कि इसे 50% समय तक पूर्णांकित किया जाता है (आईईईई 754-2008 में इस मोड को दूसरे दौर से अलग करने के लिए राउंडटीज़टूईवन कहा जाता है) -से-निकटतम मोड)
- '0 की ओर गोल' - शून्य की ओर निर्देशित गोलाई
- '+∞ की ओर गोल' - सकारात्मक अनंत की ओर निर्देशित गोलाई
- '-∞ की ओर गोल' - नकारात्मक अनंत की ओर निर्देशित गोलाई।
वास्तविक संख्याओं का विस्तार
आईईईई मानक भिन्न-भिन्न सकारात्मक और नकारात्मक अनन्तताओं के साथ, पूर्ण रूप से विस्तारित वास्तविक संख्या प्रणाली को नियोजित (और विस्तारित) करता है। प्रारूपण के समय, प्रोग्रामर को मोड चयन विकल्प प्रदान करके, एकल अहस्ताक्षरित अनंत के साथ प्रोजेक्टिवली विस्तारित वास्तविक संख्या प्रणाली को सम्मिलित करने के लिए मानक का प्रस्ताव था। चूँकि, अंतिम मानक की समष्टिता को कम करने के हित में, प्रोजेक्टिव मोड को विस्थापित कर दिया गया था। इंटेल 8087 और इंटेल 80287 फ़्लोटिंग पॉइंट सह-प्रोसेसर दोनों इस प्रोजेक्टिव मोड का समर्थन करते हैं।[11][12][13]
फंक्शन्स और प्रेडिकेट्स
मानक संचालन
निम्नलिखित कार्य प्रदान किए जाने चाहिए:
- जोड़ें, घटाएं, गुणा करें, भाग करें।
- वर्गमूल
- फ़्लोटिंग पॉइंट शेष यह सामान्य मॉड्यूलो ऑपरेशन के जैसे नहीं है, यह दो सकारात्मक संख्याओं के लिए नकारात्मक हो सकता है। यह x–(round(x/y)·y) का त्रुटिहीन मान लौटाता है।
- निकटतम पूर्णांक तक पूर्णांकन अप्रत्यक्ष पूर्णांकन के लिए जब दो पूर्णांकों के मध्यआधा हो तो सम पूर्णांक चयन किया जाता है।
- तुलना संचालन. अधिक स्पष्ट परिणामों के अतिरिक्त, आईईईई 754 परिभाषित करता है कि −∞ = −∞, +∞ = +∞ और x ≠
NaNकिसी भी x के लिए (सहित)NaN) होता है।
अनुशंसित फंक्शन्स और प्रेडिकेट्स
copysign(x,y)y के चिह्न के साथ x लौटाता है, इसलिएabs(x)copysign(x,1.0)के समान होती है। यह उन कुछ ऑपरेशनों में से है जो अंकगणित के समान NaN पर संचालित होता है। फ़ंक्शनcopysignC99 मानक में नया है।- −x, विपरीत चिह्न के साथ x लौटाता है। यह कुछ स्थितियों में 0−x से भिन्न है, विशेष रूप से जब x 0 है। तो −(0) −0 है, किन्तु 0−0 का चिह्न पूर्णांकन मोड पर निर्भर करता है।
scalb(y, N)logb(x)finite(x)x के लिए प्रेडीकेट परिमित मान है, जो −Inf < x < Inf के समान है।isnan(x)x के लिए प्रेडीकेट NaN है, जो x ≠ x के समान है।x <> y, जिसका व्यवहार NaN के कारण NOT(x = y) से भिन्न होता है।unordered(x, y)सत्य है जब x, y के साथ अव्यवस्थित है, अर्थात, x या y NaN है।class(x)nextafter(x,y)x से y की दिशा में अगला प्रतिनिधित्व योग्य मान लौटाता है।
इतिहास
1976 में, इंटेल फ्लोटिंग-पॉइंट कोप्रोसेसर का विकास प्रारंभ कर रहा था।[14][15] इंटेल को अपेक्षा थी कि वह व्यापक रूप से भिन्न गणित सॉफ्टवेयर लाइब्रेरी में पाए जाने वाले सभी ऑपरेशनों के उत्तम कार्यान्वयन वाली चिप बेचने में सक्षम होगी।[14][16]
जॉन पामर, जिन्होंने इस परियोजना का प्रबंधन किया था, इसका मानना था कि इस प्रयास को भिन्न-भिन्न प्रोसेसरों में मानक एकीकृत फ़्लोटिंग पॉइंट संचालन द्वारा समर्थित किया जाना चाहिए। उन्होंने कैलिफोर्निया विश्वविद्यालय के विलियम काहन से संपर्क किया, जिन्होंनेहेवलेट पैकर्ड के कैलकुलेटर की त्रुटिहीनता में सुधार करने में सहायता की थी। काहन ने सुझाव दिया कि इंटेल डिजिटल इक्विपमेंट कॉर्पोरेशन (डीईसी) वैक्स के फ्लोटिंग पॉइंट का उपयोग करता है। प्रथम वैक्स, वैक्स-11/780 1977 के अंत में सामने आया था, और इसके फ्लोटिंग पॉइंट को अत्यधिक महत्व दिया गया था। चूँकि, अपनी चिप को व्यापक मार्केट में बेचने के लिए, इंटेल सर्वोत्तम फ़्लोटिंग पॉइंट चाहता था, और काहन ने विशिष्टताओं को प्रस्तुत किया था।[14] काहन