फिक्स्ड पॉइंट बनाम फ्लोटिंग पॉइंट नंबर


109

मैं केवल Google पर उनके बारे में परिभाषाएँ पढ़ने के लिए कठिन होने के कारण निश्चित बिंदु और फ़्लोटिंग पॉइंट नंबरों को नहीं समझ सकता। लेकिन जो कुछ भी मैंने पढ़ा है वह एक सरल पर्याप्त विवरण प्रदान करता है कि वे वास्तव में क्या हैं। क्या मुझे उदाहरण के साथ एक सादा परिभाषा मिल सकती है?


मुझे एक अच्छी परिभाषा खोजने में भी परेशानी हो रही है। मुख्य बात जो मैं देख रहा हूँ, वह मुझे इन परिणामों को समझने में मदद करने के लिए कुछ है: 3.11 + 42.0 = 45.110001 (45.11 नहीं), 3.12 + 42.0 = 45.119999 (45.12 नहीं), 3.15 + 42.0 = 45.150002 (45.15 नहीं)।
बार्ट एस।

1
मुझे लगता है कि यह एक प्रासंगिक चर्चा है (विशेष रूप से फ़्लोटिंग संख्याओं के साथ जाल का वर्णन करना और निश्चित बिंदु के साथ बेहतर परिशुद्धता है और आप फ्लोट के रूप में पैसा क्यों नहीं निकालना चाहते हैं। stackoverflow.com/questions/6320209/…
एंड्रयू नॉर्मन

रैंडम लिंक जहाँ विषयों का उल्लेख किया गया है "OpenGL® ES OpenGL ES में फ़्लोटिंग-पॉइंट और फिक्स्ड-पॉइंट सिस्टम और ईजीएल ™ विनिर्देशन के लिए प्रोफाइल शामिल हैं ..."
रेड मटर

जवाबों:


145

एक निश्चित बिंदु संख्या में बिट्स (या अंक) की एक विशिष्ट संख्या होती है जो पूर्णांक भाग (दशमलव बिंदु के बाईं ओर का हिस्सा) के लिए आरक्षित होती है और विशिष्ट भाग के लिए आरक्षित बिट्स की एक विशिष्ट संख्या (दशमलव के दाईं ओर भाग) बिंदु)। कोई फर्क नहीं पड़ता कि आपकी संख्या कितनी बड़ी या छोटी है, यह हमेशा प्रत्येक भाग के लिए समान संख्या में बिट्स का उपयोग करेगा। उदाहरण के लिए, यदि आपका निश्चित बिंदु प्रारूप दशमलव में था, IIIII.FFFFFतो सबसे बड़ी संख्या जिसका आप प्रतिनिधित्व कर सकते हैं 99999.99999और सबसे छोटी गैर-शून्य संख्या होगी 00000.00001। ऐसे कोड को संसाधित करने वाले प्रत्येक बिट में दशमलव बिंदु कहां है, इसका अंतर्निहित ज्ञान होना चाहिए।

एक अस्थायी बिंदु संख्या पूर्णांक भाग या आंशिक भाग के लिए विशिष्ट संख्या में बिट्स आरक्षित नहीं करती है। इसके बजाय यह संख्या के लिए बिट्स की एक निश्चित संख्या (जिसे मंटिसा या महत्व कहा जाता है ) और बिट्स की एक निश्चित संख्या को कहते हैं, जहां उस संख्या के भीतर दशमलव स्थान बैठता है ( घातांक कहा जाता है )। तो एक फ़्लोटिंग पॉइंट संख्या जो कि एक्सपोज़र के लिए आरक्षित 2 अंकों के साथ 10 अंक लेती है, सबसे बड़ा मान 9.9999999e+50और सबसे छोटा गैर-शून्य मान का प्रतिनिधित्व कर सकती है 0.0000001e-49


8
खैर आप भूल रहे हैं कि फ्लोटिंग पॉइंट नंबर लगभग हमेशा हस्ताक्षरित होते हैं, इसलिए न्यूनतम मूल्य वास्तव में होगा -9.9999999e+50
ब्रायन गॉर्डन

4
इसके अलावा, वहाँ प्रतिपादक पूर्वाग्रह है ताकि आप 1,000,000 और 1,000,001 के बीच 0 और 1 के बीच बहुत अधिक असतत मूल्यों का प्रतिनिधित्व कर सकें। और फ़्लोटिंग पॉइंट ऑपरेशंस के साथ बहुत सी जटिलताएँ हैं जो सामने आती हैं, जैसे कि यह सुनिश्चित करना कि आप 0 की रिपोर्ट न करें क्योंकि दो समान संख्याओं के बीच का अंतर जब पूर्वाग्रह को बढ़ाने के लिए पर्याप्त नहीं होता है।
ब्रायन गॉर्डन

28
@BrianGordon: मैं साइन बिट्स नहीं भूली; मैंने एक साधारण विवरण रखने के लिए जानबूझकर उनकी उपेक्षा की और न्यूनतम / अधिकतम और सबसे छोटे / सबसे बड़े के बीच के अंतर के बारे में चिंता करने की ज़रूरत नहीं है। मैंने जानबूझकर प्रतिपादक बायसिंग को छोड़ दिया है (जिसका किसी भी दो संख्याओं के बीच असतत मूल्यों की संख्या से कोई लेना-देना नहीं है), NaN, infinities, normalizing, gradual underflow, signed zeroes, तथ्य यह है कि अधिकांश फ्लोट्स बाइनरी (जो पहले बिट की अनुमति देता है) मंटिसा को छोड़ दिया जाए), और कई अन्य पहलू जो अवधारणा को स्पष्ट करने के लिए अनावश्यक हैं।
गाबे

2
न्यूनतम अंक के लिए कटऑफ तय क्यों है 00000.00001? मैं 00000.00000इसके बजाय देखने की उम्मीद कर रहा हूं । इसके अलावा, क्या आपके पास कोई संदर्भ है जो फिक्स्ड-पॉइंट संख्या के बारे में अधिक विस्तार से जाना है?
निकोलस मिलर

4
@NickMiller: भ्रम के लिए क्षमा करें, लेकिन मैं गैर-शून्य संख्या के बारे में बात कर रहा था। मेरा उदाहरण प्रारूप 0, 0.00001, 0.00002, ..., 99999.99998, 99999.99999 का प्रतिनिधित्व कर सकता है।
गाबे

31

एक निश्चित बिंदु संख्या का मतलब है कि दशमलव बिंदु के बाद निश्चित संख्या में अंक हैं। एक अस्थायी बिंदु संख्या दशमलव बिंदु के बाद अंकों की एक अलग संख्या के लिए अनुमति देता है।

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

अक्सर, जब निश्चित बिंदु का उपयोग किया जाता है, तो प्रोग्रामर वास्तव में एक पूर्णांक का उपयोग करता है और फिर यह धारणा बनाता है कि कुछ अंक दशमलव बिंदु से परे हैं। उदाहरण के लिए, मैं सटीकता के दो अंक रखना चाह सकता हूं, इसलिए 100 का मान वास्तव में 1.00, 101 का अर्थ 1.01, 12345 का मतलब 123.45, आदि है।

फ्लोटिंग पॉइंट नंबर अधिक सामान्य उद्देश्य हैं क्योंकि वे उसी तरह से बहुत छोटी या बहुत बड़ी संख्याओं का प्रतिनिधित्व कर सकते हैं, लेकिन जहां दशमलव स्थान जाता है, वहां अतिरिक्त भंडारण करने के लिए एक छोटा सा जुर्माना है।


2
फ्लोटिंग पॉइंट का उपयोग एक समस्या बन जाता है जब आप उदाहरण के लिए उनके साथ गणना करना शुरू करते हैं यदि आप एक बहुत छोटे और एक बहुत बड़े फ़्लोटिंग पॉइंट नंबर को एक साथ जोड़ते हैं। सारांशित परिणाम सटीकता खो देता है क्योंकि इसमें दो चरम सीमाओं के साथ एक संख्या का प्रतिनिधित्व करना होता है और निचले दशमलव को छंटनी होती है (और गोल नहीं होती)।
एंड्रयू नॉर्मन

2
एक फ्लोटिंग पॉइंट में घातांक मानों के संभावित उपयोग से मानक संख्याओं की उम्मीद करने वाले कंप्यूटर सिस्टम के साथ समस्याएँ पैदा हो सकती हैं
एंड्रयू नॉर्मन

5

मेरी समझ से, पूर्णांक अंकगणित पूर्णांक का उपयोग करके किया जाता है। जहाँ दशमलव भाग को बिट्स की निश्चित मात्रा में संग्रहित किया जाता है, या दशमलव परिशुद्धता के कितने अंकों की संख्या को गुणा किया जाता है।

उदाहरण के लिए, यदि संख्या 12.34को संग्रहीत करने की आवश्यकता है और हमें दशमलव बिंदु के बाद केवल दो अंकों की सटीकता की आवश्यकता है, तो संख्या 100को प्राप्त करने के लिए गुणा किया जाता है 1234। इस संख्या पर गणित का प्रदर्शन करते समय, हम इस नियम का उपयोग करेंगे। इस संख्या को जोड़ने 5620या डेटा में या 56.20उपज होगा ।685468.54

यदि हम निश्चित बिंदु संख्या के दशमलव भाग की गणना करना चाहते हैं, तो हम modulo (%) ऑपरेंड का उपयोग करते हैं।

12.34 (स्यूडोकोड):

v1 = 1234 / 100 // get the whole number
v2 = 1234 % 100 // get the decimal number (100ths of a whole).
print v1 + "." + v2 // "12.34"

फ्लोटिंग पॉइंट नंबर प्रोग्रामिंग में एक पूरी तरह से अलग कहानी है। फ्लोटिंग पॉइंट नंबरों के लिए वर्तमान मानक संख्या के डेटा के लिए 23 बिट्स, एक्सपोनेंट के लिए 8 बिट्स, और 1 लेकिन साइन के लिए कुछ का उपयोग करते हैं। इस बारे में अधिक जानकारी के लिए यह विकिपीडिया लिंक देखें।


3

'फिक्स्ड पॉइंट' शब्द उस तरह से संदर्भित होता है जिसमें अंकों का प्रतिनिधित्व अंकों की निश्चित संख्या के साथ और कभी-कभी दशमलव बिंदु से पहले होता है। फ्लोटिंग-पॉइंट प्रतिनिधित्व के साथ, दशमलव बिंदु की नियुक्ति संख्या के महत्वपूर्ण अंकों के सापेक्ष 'फ्लोट' कर सकती है। उदाहरण के लिए, एक समान दशमलव बिंदु प्लेसमेंट कन्वेंशन के साथ एक निश्चित-बिंदु प्रतिनिधित्व संख्या 123.45, 1234.56, 12345.67, आदि का प्रतिनिधित्व कर सकता है, जबकि एक फ्लोटिंग-पॉइंट प्रतिनिधित्व इसके अलावा 1.234567, 123456.7, 0.00001234567, 1234567000000000, आदि का प्रतिनिधित्व कर सकता है।


-6

संख्या 123.456789 लें

  • पूर्णांक के रूप में, यह संख्या 123 होगी
  • एक निश्चित बिंदु (2) के रूप में, यह संख्या 123.46 होगी (मान लें कि आपने इसे गोल किया है)
  • फ्लोटिंग पॉइंट के रूप में, यह संख्या 123.456789 होगी

फ़्लोटिंग पॉइंट आपको बहुत अधिक सटीकता के साथ हर संख्या का प्रतिनिधित्व करने देता है। फिक्स्ड कम सटीक है, लेकिन कंप्यूटर के लिए सरल है ..


11
वह सटीकता जिसके साथ आप एक संख्या लिख ​​सकते हैं, यह संबंधित नहीं है कि यह फ्लोटिंग पॉइंट, पूर्णांक या निश्चित बिंदु में लिखा गया है या नहीं। यह आपके द्वारा उपलब्ध महत्वपूर्ण अंकों की संख्या से संबंधित है। एक उदाहरण के लिए, INT_MAX एक संख्या है जिसे वास्तव में एक इंट के रूप में दर्शाया जा सकता है, लेकिन एक फ्लोट के रूप में नहीं क्योंकि उनके पास सटीक रूप से प्रतिनिधित्व करने के लिए आवश्यक 31 बिट्स की सटीकता नहीं है।
किआन

1
जब तक प्रश्न में संख्या को संभालने के लिए इसका आकार तय नहीं हो जाता, तब तक सबसे सटीक है। जब आप निश्चित बिंदु संख्याओं के साथ गणित करते हैं, तो गोलाई तब होती है जब एक गणना में दशमलव सीमा से अधिक शेष होता है। यदि आप एक बहुत बड़ी संख्या के साथ बहुत कम संख्या जोड़ते हैं, तो एक अस्थायी बिंदु के साथ आप एक बहुत ही गलत मान प्राप्त कर सकते हैं। जब ऐसा होता है कि अंक गोल किए बिना खो जाते हैं
एंड्रयू नॉर्मन

यह भ्रामक और गलत है। निश्चित बिंदु का मतलब है कि दशमलव बिंदु तय होने के बाद अंकों की संख्या। यह इस बारे में कुछ नहीं कहता कि इसमें कितनी सटीकता है।
ऑस्कर स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.