आईईईई 754-1985
आईईईई 754-1985[1] कंप्यूटर में तैरनेवाला स्थल नंबरों का प्रतिनिधित्व करने के लिए एक उद्योग तकनीकी मानक था, जिसे आधिकारिक तौर पर 1985 में अपनाया गया था और 2008 में IEEE 754-2008 द्वारा प्रतिस्थापित किया गया था, और फिर 2019 में मामूली संशोधन IEEE 754-2019 द्वारा प्रतिस्थापित किया गया था।[2] अपने 23 वर्षों के दौरान, यह फ़्लोटिंग-पॉइंट गणना के लिए सबसे व्यापक रूप से उपयोग किया जाने वाला प्रारूप था। इसे सॉफ़्टवेयर में, फ़्लोटिंग-पॉइंट पुस्तकालय (कंप्यूटिंग) के रूप में, और हार्डवेयर में, कई CPU और फ़्लोटिंग-पॉइंट इकाई के निर्देश (कंप्यूटर विज्ञान) में लागू किया गया था। आईईईई 754-1985 बनने वाले मसौदे को लागू करने वाला पहला एकीकृत सर्किट इंटेल 8087 था।
आईईईई 754-1985 बाइनरी अंक प्रणाली में संख्याओं का प्रतिनिधित्व करता है, जो परिशुद्धता के चार स्तरों की परिभाषा प्रदान करता है, जिनमें से दो सबसे अधिक उपयोग किए जाते हैं:
| Level | Width | Range at full precision | Precision[lower-alpha 1] |
|---|---|---|---|
| Single precision | 32 bits | ±1.18×10−38 to ±3.4×1038 | Approximately 7 decimal digits |
| Double precision | 64 bits | ±2.23×10−308 to ±1.80×10308 | Approximately 16 decimal digits |
मानक सकारात्मक और नकारात्मक अनंत के लिए प्रतिनिधित्व को भी परिभाषित करता है, एक नकारात्मक शून्य, शून्य से विभाजन जैसे अमान्य परिणामों को संभालने के लिए पांच अपवाद, उन अपवादों का प्रतिनिधित्व करने के लिए NaN नामक विशेष मान, ऊपर दिखाए गए से छोटी संख्याओं का प्रतिनिधित्व करने के लिए असामान्य संख्याएं, और चार गोल मोड।
संख्याओं का प्रतिनिधित्व
IEEE 754 प्रारूप में फ़्लोटिंग-पॉइंट नंबरों में तीन फ़ील्ड होते हैं: एक साइन बिट, एक घातांक पूर्वाग्रह और एक अंश। निम्नलिखित उदाहरण प्रत्येक का अर्थ बताता है।
दशमलव संख्या 0.1562510 बाइनरी में दर्शाया गया 0.00101 है2 (अर्थात् 1/8 + 1/32)। (अंकाक्षर संख्या मूलांक दर्शाते हैं।) वैज्ञानिक संकेतन के अनुरूप, जहां संख्याओं को दशमलव बिंदु के बाईं ओर एक गैर-शून्य अंक के रूप में लिखा जाता है, हम इस संख्या को फिर से लिखते हैं ताकि इसमें बाइनरी के बाईं ओर एक एकल 1 बिट हो बिंदु । हम तीन स्थितियों द्वारा छोड़े गए बिट्स के स्थानांतरण की भरपाई के लिए बस 2 की उचित शक्ति से गुणा करते हैं:
अब हम भिन्न और घातांक को पढ़ सकते हैं: भिन्न .01 है2 और घातांक −3 है।
जैसा कि चित्रों में दिखाया गया है, IEEE 754 में इस संख्या का प्रतिनिधित्व करने वाले तीन फ़ील्ड हैं:
- चिन्ह = 0, क्योंकि संख्या धनात्मक है। (1 नकारात्मक दर्शाता है।)
- पक्षपाती घातांक = −3 + पूर्वाग्रह। 'एकल परिशुद्धता' में, पूर्वाग्रह '127' है, इसलिए इस उदाहरण में पक्षपाती घातांक 124 है; 'डबल प्रिसिजन' में, पूर्वाग्रह '1023' है, इसलिए इस उदाहरण में पक्षपाती घातांक 1020 है।
- भिन्न = .01000…2.
IEEE 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 कहा जाता है, संख्या नहीं के लिए। IEEE 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
एकल परिशुद्धता में दिए गए घातांक के लिए कुछ उदाहरण सीमा और अंतराल मान:
| 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-बिट विस्तारित प्रारूप सबसे आम तौर पर लागू किया जाने वाला विस्तारित प्रारूप है जो इन आवश्यकताओं को पूरा करता है।
उदाहरण
यहां एकल-सटीक IEEE 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% समय तक पूर्णांकित किया जाता है (IEEE 754-2008 में इस मोड को दूसरे दौर से अलग करने के लिए राउंडटीज़टूईवन कहा जाता है) -से-निकटतम मोड)
- '0 की ओर गोल' - शून्य की ओर निर्देशित गोलाई
- '+∞ की ओर गोल' - सकारात्मक अनंत की ओर निर्देशित गोलाई
- '-∞ की ओर गोल' - नकारात्मक अनंत की ओर निर्देशित गोलाई।
वास्तविक संख्याओं का विस्तार
आईईईई मानक अलग-अलग सकारात्मक और नकारात्मक अनन्तताओं के साथ, पूर्ण रूप से विस्तारित वास्तविक संख्या प्रणाली को नियोजित (और विस्तारित) करता है। प्रारूपण के दौरान, प्रोग्रामर को एक मोड चयन विकल्प प्रदान करके, एकल अहस्ताक्षरित अनंत के साथ प्रोजेक्टिवली विस्तारित वास्तविक संख्या प्रणाली को शामिल करने के लिए मानक का प्रस्ताव था। हालाँकि, अंतिम मानक की जटिलता को कम करने के हित में, प्रोजेक्टिव मोड को हटा दिया गया था। Intel 8087 और Intel 80287 फ़्लोटिंग पॉइंट सह-प्रोसेसर दोनों इस प्रोजेक्टिव मोड का समर्थन करते हैं।[11][12][13]
कार्य और विधेय
मानक संचालन
निम्नलिखित कार्य प्रदान किए जाने चाहिए:
- अंकगणितीय संक्रियाएं|जोड़ें, घटाएं, गुणा करें, भाग करें
- वर्गमूल
- फ़्लोटिंग पॉइंट शेष. यह सामान्य मॉड्यूलो ऑपरेशन की तरह नहीं है, यह दो सकारात्मक संख्याओं के लिए नकारात्मक हो सकता है। यह का सटीक मान लौटाता है x–(round(x/y)·y).
- पूर्णांक तक पूर्णांकन. अप्रत्यक्ष पूर्णांकन के लिए जब दो पूर्णांकों के बीच आधा हो तो सम पूर्णांक चुना जाता है।
- तुलना संचालन. अधिक स्पष्ट परिणामों के अलावा, IEEE 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]
जॉन पामर, जिन्होंने इस परियोजना का प्रबंधन किया था, का मानना था कि इस प्रयास को अलग-अलग प्रोसेसरों में एक मानक एकीकृत फ़्लोटिंग पॉइंट संचालन द्वारा समर्थित किया जाना चाहिए। उन्होंने कैलिफोर्निया विश्वविद्यालय के विलियम कहाँ से संपर्क किया, जिन्होंने हेवलेट पैकर्ड के कैलकुलेटर की सटीकता में सुधार करने में मदद की थी। कहन ने सुझाव दिया कि इंटेल डिजिटल उपकरण निगम (DEC) VAX के फ्लोटिंग पॉइंट का उपयोग करे। पहला VAX, VAX-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.