फ्लोट और डबल के बीच अंतर - मुझे किस का उपयोग करना चाहिए?

Anonim

(नोट: यह लेख मानता है कि पाठक कंप्यूटर विज्ञान की मूल बातें जानते हैं)

कंप्यूटर पर दाखिला लेने वाले कई नौसिखिया प्रोग्रामर / छात्र अक्सर पूछे जाने वाले प्रश्न पूछते हैं जो कंप्यूटर विज्ञान के भीतर विशेष क्षेत्र के लिए प्रासंगिक होते हैं जो वे पढ़ाई करते हैं। बाइनरी , दशमलव , ऑक्टल और हेक्साडेसिमल सहित, आधुनिक कंप्यूटरों में उपयोग की जाने वाली संख्या प्रणाली के विषयों के साथ सबसे शुरुआती पाठ्यक्रम शुरू होते हैं < प्रणाली। ये कंप्यूटर संख्या स्वरूप हैं जो कंप्यूटर (या कैलकुलेटर और किसी अन्य प्रकार के डिजिटल कंप्यूटर) में संख्यात्मक मानों के आंतरिक प्रतिनिधित्व हैं। इन मानों को "बिट्स के समूहकरण" के रूप में संग्रहीत किया जाता है

जैसा कि हम जानते हैं कि कंप्यूटर द्विआधारी अंकों के सेट में डेटा का प्रतिनिधित्व करते हैं (यानी,

1s और 0s के संयोजन में, जैसे, 1111 दशमलव प्रणाली में 15 का प्रतिनिधित्व करता है), यह विभिन्न संख्या प्रारूपों के बारे में सिखाने के लिए समझ में आता है जिन्हें मूल्यों की एक गतिशील श्रेणी का प्रतिनिधित्व करने के लिए उपयोग किया जाता है, क्योंकि वे गणना / संख्या प्रसंस्करण के मूलभूत ब्लॉकों को बनाते हैं किसी भी प्रकार की आपरेशन में कक्षा प्रणाली (अक्सर खराब) में एक बार परिभाषित होने के बाद, छात्रों को एक ही प्रकार (i। ई।, फ़्लोटिंग-पॉइंट अंकगणित <) के भीतर विभिन्न संख्या प्रारूपों पर जाने की परीक्षा दी जाती है, जिनके पास सटीक और संख्यात्मक सीमा होती है। इस प्रकार, उन्हें कुछ प्रकार के बीच बारीकियों को जानने के लिए मजबूर किया जाता है सबसे अधिक इस्तेमाल किए जाने वाले डेटा प्रकारों में से दो फ्लोट और डबल हैं, और जब वे एक ही जरूरतों को लक्षित करते हैं (यानी, फ़्लोटिंग-पॉइंट अंकगणित ), काफी हैं कार्यक्रम में गणना पर उनके आंतरिक प्रतिनिधित्व और समग्र प्रभाव में कुछ अंतर। यह दुर्भाग्यपूर्ण है कि कई प्रोग्रामर फ्लैट और डबल डेटा प्रकारों के बीच बारीकियों को याद करते हैं, और उन्हें उन जगहों पर दुर्व्यवहार करते हैं जहां उन्हें पहली जगह पर उपयोग नहीं किया जाना चाहिए। आखिरकार कार्यक्रम के दूसरे हिस्सों में गलत अनुमानों के परिणामस्वरूप।

इस आलेख में, मैं आपको सी प्रोग्रामिंग भाषा में कोड उदाहरणों के साथ फ्लोट और डबल के बीच का अंतर बताता हूं। आएँ शुरू करें!

फ्लोट्स बनाम डबल … सौदा क्या है?

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

20 123

, 16 23 , 10 2 , आदि, वे पूर्ण संख्याएं नहीं हैं (यानी, 2 , 5 , 15 , आदि), इस प्रकार उन्हें उनके विचार की आवश्यकता होती है बाइनरी में अंश परिणामस्वरूप दशमलव संख्या (i। ई।, 20. 123 , 16। 23 , आदि) को आसानी से एक सामान्य बाइनरी प्रारूप (i.e., पूर्णांक) के साथ प्रदर्शित नहीं किया जा सकता है। फ्लोट और डबल के बीच मुख्य अंतर यह है कि पूर्व एकल परिशुद्धता (32-बिट) फ़्लोटिंग पॉइंट डेटा है, जबकि बाद में डबल सटीक (64-बिट) फ्लोटिंग प्वाइंट डेटा प्रकार है। डबल को "डबल" कहा जाता है क्योंकि यह मूलतः फ्लोट के एक डबल सटीक संस्करण है। यदि आप एक बड़ी राशि की गणना कर रहे हैं (संख्या में हजारों के बारे में सोचें), तो डबल में त्रुटियां छोटी होंगी और आप बहुत सटीक नहीं खोेंगे।

कोड उदाहरणों का उपयोग करने के लिए विस्तृत करना बेहतर है। निम्नलिखित फ्लोट पर आपरेशन और सी भाषा में प्रदान किए गए गणित कार्यों के माध्यम से डबल है:

#include

int main () {

फ्लोट संख्या 1 = 1 एफ / 82;

फ्लोट संख्या 2 = 0;

के लिए (इंट i = 0; i <738; ++ i)

नं 2 + = 1 अंक;

प्रिंटफ़ ("% 7g n", num2);

डबल संख्या 3 = 1. 0/82;

-2 ->

डबल अंक 4 = 0;

के लिए (इंट I = 0; i <738; ++ i)

num4 + = num3;

प्रिंटफ़ ("% 15g n", num4);

getchar ();

}

यह निम्न छापती है: < 9 000,031

8। 99999999999983

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

निम्नलिखित में सीक्वट्र () फ़ंक्शन का उदाहरण है:

# शामिल करें

# शामिल करें

इंट मुख्य () {

फ्लोट संख्या 1 = sqrt (2382719676512365। 1230112312312312));

डबल संख्या 2 = sqrt (2382719676512365। 1230112312312312);

प्रिंटफ़ ("% एफ n", संख्या 1);

प्रिंटफ़ ("% एफ n", संख्या 2);

getchar ();

}

यह निम्न आउटपुट देता है:

48813108 000000

48,813,109। 678778

यहां, आप देख सकते हैं कि डबल में जवाब बेहतर परिशुद्धता है

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

आधुनिक कंप्यूटरों को लक्षित करने वाले कोड में डबल के बजाय फ्लोट का उपयोग करने के लिए शायद ही कोई कारण नहीं है डबल में अतिरिक्त सटीक कम कर देता है, लेकिन गोल त्रुटियों या अन्य अड़चन की संभावना को समाप्त नहीं करता है जो कार्यक्रम के अन्य भागों में समस्या पैदा कर सकता है। कई गणित फ़ंक्शंस या ऑपरेटर दो बार कनवर्ट करते हैं और वापस लौटते हैं, इसलिए आपको नंबर वापस फ़्लोट पर डालने की आवश्यकता नहीं है, क्योंकि यह सटीक खो सकता हैफ़्लोटिंग-पॉइंट अंकगणित पर विस्तृत विश्लेषण के लिए, मैं आपको अत्यधिक भययोग्य लेख (// docs। Oracle। Com / cd / E19957-01 / 806-3568 / ncg_goldberg। Html) को पढ़ने की सलाह देता हूं।

सारांश

तो … संक्षेप में:

स्थान जहां आपको फ्लोट का प्रयोग करना चाहिए:

यदि आप हार्डवेयर को लक्षित कर रहे हैं जहां एकल-सटीक दोहरे-सटीक की तुलना में तेज़ है

आपका एप्लिकेशन फ्लोटिंग-पॉइंट अंकगणित का भारी उपयोग करता है, जैसे कि हज़ारों नंबर के साथ हजारों की संख्या।

आप बहुत कम स्तरीय अनुकूलन कर रहे हैं उदाहरण के लिए, आप विशेष सीपीयू निर्देशों (i।, एसएसई, एसएसई 2, एवीएक्स, आदि) का इस्तेमाल कर रहे हैं जो एक समय में कई संख्याओं / एरे / वैक्टर पर काम करते हैं।

  • निष्कर्ष
  • इस आलेख में मैंने फ्लोट और डबल के बीच अंतर को हाइलाइट किया है, और जिसे विशिष्ट स्थानों में इस्तेमाल किया जाना चाहिए I बेशक, ज्यादातर स्थानों में डबल उपयोग करने के लिए आंखों से आँख बंद करके, खासकर यदि आप आधुनिक कंप्यूटरों को लक्षित कर रहे हैं, क्योंकि डबल फ्लोटिंग-अंक अंकगणित के उपयोग के कारण कम दक्षता की संभावना बेहद कम है। यदि आपके कोई प्रश्न हैं, तो आप नीचे टिप्पणी अनुभाग में पूछ सकते हैं!
-2 ->