floating-pointफ्लोटिंग-पॉइंट के साथ शुरुआत करना


टिप्पणियों

यह खंड फ़्लोटिंग-पॉइंट क्या है का एक सिंहावलोकन प्रदान करता है, और क्यों एक डेवलपर इसका उपयोग करना चाहता है।

इसमें फ्लोटिंग-पॉइंट के भीतर किसी भी बड़े विषयों का उल्लेख होना चाहिए, और संबंधित विषयों से लिंक करना चाहिए। चूंकि फ़्लोटिंग-पॉइंट के लिए दस्तावेज़ीकरण नया है, इसलिए आपको उन संबंधित विषयों के प्रारंभिक संस्करण बनाने की आवश्यकता हो सकती है।

अवलोकन

फ्लोटिंग पॉइंट क्या है?

दो प्रकार की संख्याएँ हैं:

  • निश्चित बिंदु जहां मूलांक से पहले और बाद में कुछ निश्चित अंक मिलते हैं।
  • फ्लोटिंग पॉइंट जहां मंटिसा के लिए और घातांक के लिए निश्चित संख्या में अंक उपलब्ध होते हैं।

दशमलव बिंदु के पहले तीन दशमलव स्थानों और दशमलव स्थान के बाद दो दशमलव स्थानों के साथ दशमलव अंकों का उपयोग करने वाला एक उदाहरण:

  • 0 को 000.00 के रूप में दर्शाया जाएगा
  • 0.123 को 000.12 के रूप में दर्शाया जाएगा
  • 0.00123 को 000.00 के रूप में दर्शाया जाएगा
  • 1 को 001.00 के रूप में दर्शाया जाएगा
  • 1.123 को 001.12 के रूप में दर्शाया जाएगा
  • 1.00123 को 001.00 के रूप में दर्शाया जाएगा
  • 123.456 को 123.45 के रूप में दर्शाया जाएगा
  • 1234.56 एक त्रुटि है क्योंकि इसे 234.56 के रूप में संग्रहीत किया जाएगा और यह सिर्फ गलत है

मंटिसा के लिए पाँच दशमलव स्थानों और दशमलव के लिए एक दशमलव स्थान के साथ दशमलव अंकों का उपयोग करने वाला एक उदाहरण:

  • 0 को .00000 x 10 ^ 0 के रूप में दर्शाया जा सकता है
  • 0.1 को .10000 x 10 ^ 0 के रूप में दर्शाया जा सकता है
  • 0.0000123456 को .12345 x 10 ^ -4 के रूप में दर्शाया जा सकता है
  • 0.000000000123456 को .12345 x 10 ^ -9 के रूप में प्रस्तुत किया जा सकता है
  • 0.00000000001 एक त्रुटि है क्योंकि घातांक संख्या को संग्रहीत करने के लिए पर्याप्त बड़ा नहीं है
  • 1 को .10000 x 10 ^ 1 के रूप में दर्शाया जा सकता है
  • 1.123 को .11230 x 10 ^ 1 के रूप में दर्शाया जा सकता है
  • 1.00123 को .10012 x 10 ^ 1 के रूप में दर्शाया जा सकता है
  • 123.45678 को .12345 x 10 ^ 2 के रूप में प्रतिनिधित्व किया जा सकता है
  • 123456789.1 .12345 x 10 ^ 9 के रूप में प्रतिनिधित्व किया जा सकता है
  • 1000000000 एक त्रुटि है क्योंकि घातांक संख्या को संग्रहीत करने के लिए पर्याप्त बड़ा नहीं है

तो एक फ्लोटिंग पॉइंट नंबर, रिश्तेदार सटीकता की समान मात्रा के साथ बहुत भिन्न परिमाण (0.000000000123456 और 123456789.1) के साथ संख्याओं का प्रतिनिधित्व कर सकता है।

दशमलव बिंदुओं की एक विशेष संख्या हमेशा संख्या के परिमाण (उदाहरण के लिए पैसा) की परवाह किए बिना आवश्यक होती है, तब निश्चित बिंदु संख्याएँ उपयोगी होती हैं। जब परिमाण भिन्न होता है और सटीकता की आवश्यकता होती है तब फ़्लोटिंग पॉइंट नंबर उपयोगी होते हैं। उदाहरण के लिए: एक रोड इंजीनियर की दूरी को मीटर में मापा जाता है और एक मीटर का .01 महत्वहीन होता है, लेकिन एक माइक्रोचिप डिजाइनर के लिए 0.0000001 मीटर और .000000001 मीटर के बीच का अंतर बहुत बड़ा होता है - और एक भौतिक विज्ञानी को भारी संख्या और बहुत, बहुत उपयोग करने की आवश्यकता हो सकती है। उसी गणना में छोटी संख्या। कई अलग-अलग परिमाणों में सटीकता वह है जो फ्लोटिंग पॉइंट नंबरों को उपयोगी बनाती है।

यह काम किस प्रकार करता है

कंप्यूटर दशमलव का उपयोग नहीं करते हैं - वे बाइनरी का उपयोग करते हैं और जो फ्लोटिंग पॉइंट के लिए समस्या का कारण बनता है क्योंकि प्रत्येक दशमलव संख्या को एक फ्लोटिंग पॉइंट नंबर द्वारा बिल्कुल नहीं दर्शाया जा सकता है और जो गणनाओं में गोलाई त्रुटियों का परिचय देता है।

दशमलव में सभी उदाहरणों को करने के बाद यह ध्यान रखना महत्वपूर्ण है कि क्योंकि वे द्विआधारी हैं, बजाय दशमलव अंशों के योग के रूप में एक अस्थायी बिंदु संख्या को संग्रहीत करने के लिए:

123.875 = 1/10^-2 + 2/10^-1 + 3/10^0 + 8/10^1 + 7/10^2 + 5/10^3
 

बाइनरी अंशों के योग के रूप में कंप्यूटर फ्लोटिंग पॉइंट नंबरों को संग्रहीत करता है:

123.875 = 1/2^-6 + 1/2^-5 + 1/2^-4 + 1/2^-3 + 1/2^-1 + 1/2^0 + 1/2^1 + 1/2^2 + 1/2^3
 

बिट पैटर्स को संग्रहीत करने के कई अलग-अलग तरीके हैं जो उन अंशों का प्रतिनिधित्व करते हैं लेकिन अब जो सबसे अधिक कंप्यूटर उपयोग करते हैं वह IEEE-753 मानक पर आधारित है। इसमें दशमलव और बाइनरी प्रतिनिधित्व दोनों को संग्रहीत करने और विभिन्न आकार के डेटा प्रकारों के लिए नियम हैं।

IEEE मानक का उपयोग करके सामान्य संख्याओं को संग्रहीत करने का तरीका है:

  • साइन के लिए एक बिट - MSB में संग्रहीत, 1 का अर्थ है नकारात्मक और 0 का अर्थ है सकारात्मक
  • प्रतिपादक के लिए कुछ बिट्स - पूर्वाग्रह को सकारात्मक और नकारात्मक दोनों घातांक प्राप्त करने के लिए घटाया जाता है
  • मंटिसा के लिए कुछ बिट्स - दशमलव स्थान के बाद अंक 1 के साथ दशमलव स्थान के पहले अंक।

अधिक क्रमिक अंडरफ़्लो की अनुमति देने के लिए, अपसामान्य संख्या (जब घातांक बिट सभी शून्य होते हैं) को विशेष रूप से व्यवहार किया जाता है: प्रतिपादक को -126 के लिए सेट किया जाता है और अंतर्निहित 1 को दशमलव स्थान से पहले नहीं जोड़ा जाता है।

32 बिट IEEE-754 फ्लोटिंग पॉइंट नंबर

एक सामान्य 32 बिट IEEE-754 फ़्लोटिंग पॉइंट संख्या के लिए:

  • बिट 32 का चिन्ह है
  • बिट्स 24-31 प्रतिपादक हैं - पूर्वाग्रह 127 है
  • बिट्स 1-23 मंटिसा हैं

तो एक सामान्य संख्या की गणना इस प्रकार की जाती है:

-1^sign * 2^(exponent-bias) * 1.mantissa
 

यदि बिट पैटर्न थे:

0 10000101 11101111100000000000000
 

फिर मूल्य है:

-1^0 * 2^(133-127) * 1.111011111
-1^0 *     2^6     * (1 + 1/2 + 1/4 + 1/8 + 1/32 + 1/64 + 1/128 + 1/256 + 1/512)
   1 *      64     * 991/512
         123.875
 

कुछ विशेष मूल्य हैं:

0 11111111 11111111111111111111111 = NaN
0 11111111 00000000000000000000000 = +infinity
1 11111111 00000000000000000000000 = -infinity
0 00000000 00000000000000000000000 = +Zero
1 00000000 00000000000000000000000 = -Zero
 

32 बिट IEEE-754 प्रारूप की विशिष्टताओं को यहां देखा जा सकता है: