आईईईई 754-1985
आईईईई 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 अभ्यावेदन के कुछ उदाहरण दिए गए हैं:
| प्रकार | चिह्न | वास्तविक घातांक | घातांक (बायस्ड) | घातांक क्षेत्र | अपूर्णांक क्षेत्र | मान |
|---|---|---|---|---|---|---|
| शून्य | 0 | −126 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0000 | 0.0 |
| नकारात्मक शून्य | 1 | −126 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0000 | −0.0 |
| एक | 0 | 0 | 127 | 0111 1111 | 000 0000 0000 0000 0000 0000 | 1.0 |
| शून्य से एक कम | 1 | 0 | 127 | 0111 1111 | 000 0000 0000 0000 0000 0000 | −1.0 |
| सबसे छोटी असामान्यीकृत संख्या | * | −126 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0001 | ±2−23 × 2−126 = ±2−149 ≈ ±1.4×10−45 |
| "मध्य" असामान्यीकृत संख्या | * | −126 | 0 | 0000 0000 | 100 0000 0000 0000 0000 0000 | ±2−1 × 2−126 = ±2−127 ≈ ±5.88×10−39 |
| सबसे बड़ी असामान्यीकृत संख्या | * | −126 | 0 | 0000 0000 | 111 1111 1111 1111 1111 1111 | ±(1−2−23) × 2−126 ≈ ±1.18×10−38 |
| सबसे छोटी सामान्यीकृत संख्या | * | −126 | 1 | 0000 0001 | 000 0000 0000 0000 0000 0000 | ±2−126 ≈ ±1.18×10−38 |
| सबसे बड़ी सामान्यीकृत संख्या | * | 127 | 254 | 1111 1110 | 111 1111 1111 1111 1111 1111 | ±(2−2−23) × 2127 ≈ ±3.4×1038 |
| सकारात्मक अनन्तता | 0 | 128 | 255 | 1111 1111 | 000 0000 0000 0000 0000 0000 | +∞ |
| नकारात्मक अनन्तता | 1 | 128 | 255 | 1111 1111 | 000 0000 0000 0000 0000 0000 | −∞ |
| कोई संख्या नहीं | * | 128 | 255 | 1111 1111 | गैर शून्य | NaN |
| * साइन बिट 0 या 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] काहन ने प्रारंभ में अनुरोध किया था कि फ़्लोटिंग पॉइंट बेस दशमलव हो[17][unreliable source?] किन्तु कोप्रोसेसर का हार्डवेयर डिज़ाइन उस परिवर्तन को करने के लिए अधिक दूर था।
इंटेल के अंदर कार्य ने अन्य विक्रेताओं को चिंतित कर दिया, जिन्होंने समान अवसर सुनिश्चित करने के लिए मानकीकरण प्रयास स्थापित किया। काहन ने नवंबर 1977 में आयोजित दूसरी आईईईई 754 मानक कार्य समूह की बैठक में भाग लिया था। अंत में उन्हें इंटेल से उनके कोप्रोसेसर के लिए उनके कार्य के आधार पर ड्राफ्ट प्रस्ताव प्रस्तुत करने की अनुमति मिली; उन्हें प्रारूप के विवरण और उसके औचित्य को समझाने की अनुमति दी गई थी, किन्तु इंटेल के कार्यान्वयन वास्तुकला से संबंधित कुछ भी नहीं। ड्राफ्ट जेरोम कूनन और हेरोल्ड स्टोन के साथ सह-लिखित था, और प्रारंभ में इसे काहन-कूनन-स्टोन प्रस्ताव या के-सी-एस प्रारूप के रूप में जाना जाता था।[14][15][16][18]
चूंकि 8-बिट घातांक दोहरे-त्रुटिहीनता संख्याओं के लिए वांछित कुछ परिचालनों के लिए पर्याप्त चौड़ा नहीं था, उदाहरण के लिए दो 32-बिट संख्याओं के उत्पाद को संग्रहीत करने के लिए,[19] काहन के प्रस्ताव और डीईसी के प्रति-प्रस्ताव दोनों में 11 बिट्स का उपयोग किया गया, जैसे कि 1965 से सीडीसी 6600 के समय-परीक्षणित सीडीसी 6600#60-बिट फ़्लोटिंग पॉइंट|60-बिट फ़्लोटिंग-पॉइंट प्रारूप।[15][18][20]कहन के प्रस्ताव में अनन्तताओं का भी प्रावधान किया गया है, जो विभाजन-दर-शून्य स्थितियों से निपटने में उपयोगी होते हैं; नॉट-ए-नंबर मान, जो अमान्य संचालन से निपटने में उपयोगी होते हैं; असामान्य संख्याएँ, जो अंडरफ्लो के कारण होने वाली समस्याओं को कम करने में मदद करती हैं;[18][21][22]और बेहतर संतुलित घातांक पूर्वाग्रह, जो किसी संख्या का व्युत्क्रम लेते समय अतिप्रवाह और अल्पप्रवाह से बचने में मदद कर सकता है।[23][24]
अनुमोदित होने से पहले ही, ड्राफ्ट मानक को कई निर्माताओं द्वारा लागू किया गया था।[25][26] इंटेल 8087, जिसे 1980 में घोषित किया गया था, ड्राफ्ट मानक को लागू करने वाली पहली चिप थी।
1980 में, Intel 8087 चिप पहले ही रिलीज़ हो चुकी थी,[27]किन्तु प्रदर्शन संबंधी चिंताओं के कारण डीईसी विशेष रूप से असामान्य संख्याओं का विरोध करता रहा और चूंकि इससे डीईसी को डीईसी के प्रारूप पर मानकीकरण करने के लिए प्रतिस्पर्धात्मक लाभ मिलेगा।
धीरे-धीरे क्रमिक अंडरफ़्लो पर बहस 1981 तक चली जब डिजिटल उपकरण निगम द्वारा इसका आकलन करने के लिए नियुक्त विशेषज्ञ ने असंतुष्टों का पक्ष लिया। डीईसी ने यह प्रदर्शित करने के लिए अध्ययन करवाया था कि क्रमिक अंडरफ़्लो बुरा विचार था, किन्तु अध्ययन का निष्कर्ष विपरीत था, और डीईसी ने हार मान ली। 1985 में, मानक की पुष्टि की गई थी, किन्तु यह साल पहले ही वास्तविक मानक बन गया था, कई निर्माताओं द्वारा कार्यान्वित किया गया।[15][18][5]
यह भी देखें
- आईईईई 754
- आईईईई 754 फ़्लोटिंग पॉइंट नंबरों के गुणों के सरल उदाहरणों के लिए मिनीफ्लोट
- निश्चित-बिंदु अंकगणित
टिप्पणियाँ
- ↑ Precision: The number of decimal digits precision is calculated via number_of_mantissa_bits * Log10(2). Thus ~7.2 and ~15.9 for single and double precision respectively.
संदर्भ
- ↑ बाइनरी फ़्लोटिंग-पॉइंट अंकगणित के लिए आईईईई मानक. 1985. doi:10.1109/IEEESTD.1985.82928. ISBN 0-7381-1165-1.
- ↑ "ANSI/IEEE Std 754-2019". 754r.ucbtest.org. Retrieved 2019-08-06.
- ↑ Hennessy (2009). कंप्यूटर संगठन और डिज़ाइन. Morgan Kaufmann. p. 270. ISBN 9780123744937.
- ↑ Hossam A. H. Fahmy; Shlomo Waser; Michael J. Flynn, Computer Arithmetic (PDF), archived from the original (PDF) on 2010-10-08, retrieved 2011-01-02
- ↑ 5.0 5.1 5.2 William Kahan (October 1, 1997). "Lecture Notes on the Status of IEEE 754" (PDF). University of California, Berkeley. Retrieved 2007-04-12.
{{cite journal}}: Cite journal requires|journal=(help) - ↑ "Godot math_funcs.h". GitHub.com. 30 July 2022.
- ↑ "Godot math_defs.h". GitHub.com. 30 July 2022.
- ↑ "गोडोट MathfEx.cs". GitHub.com.
- ↑ "Comparing Floating Point Numbers, 2012 Edition". randomascii.wordpress.com. 26 February 2012.
- ↑ "जावा भाषा और वर्चुअल मशीन विशिष्टताएँ". Java Documentation.
- ↑ John R. Hauser (March 1996). "संख्यात्मक कार्यक्रमों में फ़्लोटिंग-पॉइंट अपवादों को संभालना" (PDF). ACM Transactions on Programming Languages and Systems. 18 (2): 139–174. doi:10.1145/227699.227701. S2CID 9820157.