फ्लोट आणि दुहेरी दरम्यान फरक - मी कोणाचा उपयोग करावा?

Anonim

(टीप: हा लेख असे गृहीत धरते की वाचक संगणक शास्त्रच्या मूलभूत गोष्टींविषयी माहिती देतात)

संगणकशास्त्र विभागात नामांकित असलेल्या अनेक न्यूबी प्रोग्रामर / विद्यार्थ्यांनी वारंवार वारंवार विचारले जाणारे प्रश्न विचारतात जे संगणक विज्ञान त्या विशिष्ट अभ्यासानुसार अभ्यास करतात. बायनरी , दशमान , octal आणि हेक्साडेसीमल

जसे आपण संगणकांना बायनरी अंकांच्या संचातील डेटा दर्शवतो (म्हणजे

1 से आणि 0 से <, जसे की, 1111 दशांश प्रणालीमध्ये < 15 प्रतिनिधित्व करते), हे मोजमाप एक गतिशील श्रेणी प्रतिनिधित्व करण्यासाठी वापरले जातात की विविध संख्या स्वरूप बद्दल शिकवण्यासाठी अर्थ प्राप्त होतो, कारण ते गणना / संख्या प्रक्रिया मूलभूत ब्लॉक करा कोणत्याही प्रकारचे ऑपरेशनमध्ये संख्या प्रणाली कक्षामध्ये (अनेकदा खराब) व्याख्या केल्यावर, विद्यार्थी एकाच प्रकारात (i., फ्लोटिंग-पॉइंट एरिथमिक्स <) वेगवेगळ्या नंबर फॉर्मेटवर पुढे जाण्याचा मोह होतो, ज्यात विशिष्ट सुस्पष्टता आणि नंबर श्रेणी असते. त्यामुळे त्यांना विशिष्ट प्रकारचे ज्ञान घेण्यास भाग पाडले जाते. सर्वात सामान्यपणे वापरल्या जाणार्या दोन डेटा प्रकार आहेत Float आणि डबल , आणि ते समान गरजा (म्हणजे, फ्लोटिंग-पॉइंट एरिथमिक्स <) लक्ष्य करीत असताना त्यांच्या अंतर्गत प्रतिसादात आणि प्रोग्रामच्या गणनेवरील एकूण परिणामांमध्ये काही फरक. हे दुर्दैवी आहे की अनेक प्रोग्रामर फ्लॅट आणि दुहेरी डेटा प्रकारांमधील सूचनेत चुकत आहेत आणि त्या स्थानावर त्यांचा दुरुपयोग करत नाहीत जेथे त्यांना प्रथम स्थानावर वापरले जाऊ नये. अखेरीस कार्यक्रमाच्या इतर भागांमध्ये चुकीचे अनुमान लावले आहेत.

या लेखातील, मी तुम्हाला सी प्रोग्रामिंग भाषेतील कोड उदाहरणांसह फ्लोट आणि दुहेरी यातील फरक सांगणार आहे. चला सुरू करुया! विमाने बस दुहेरी … सौदा काय आहे? फ्लोट आणि डबल हा फ्लोटिंग-पॉइंट एरिथमिक ऑपरेशन्ससाठी वापरले गेलेले डेटा प्रतिनिधित्व आहे, आपण गणिताच्या वर्गात गणना करत असलेल्या दशांश संख्येचा विचार करा, जसे की, 20 123

,

16 23 <,

10. 2

, इत्यादी. ती संपूर्ण संख्या नाहीत (उदा. 2 , 5 <, 15 <, इत्यादी), अशा प्रकारे त्यांना विचारात घ्यावे लागते द्विअंकीतील अपूर्णांक परिणामी दशांश चिन्ह (उदा., 20 123 , < 16. 23 , इ.) सहजपणे सामान्य बायनरी स्वरूपात (i., पूर्णांक) सह प्रस्तुत करणे शक्य नाही. फ्लोट आणि डबल यातील मुख्य फरक असा आहे की भूतपूर्व एकुण (32-बीट) फ्लोटिंग पॉईंट डेटा आहे, तर दुसरा डबल स्पेसिझन (64-बीट) फ्लोटिंग पॉईंट डेटा प्रकार आहे. दुहेरी "दुहेरी" असे म्हटले जाते कारण ते मुळात फ्लोटच्या दुहेरी आकलन आवृत्त्या आहेत. जर आपण प्रचंड संख्येची गणना करत असाल (संख्यातील हजारो विचार करा), तर त्यातील चुका काही प्रमाणात दुप्पट असतील आणि आपण खूप अचूकता गमावणार नाही.

कोड उदाहरणांचा वापर करून स्पष्ट करणे चांगले आहे. खालील भाषेत C भाषेमध्ये प्रदान केलेल्या गणित कार्यांद्वारे फ्लोट चालू आहे आणि दुहेरी आहे: # अंतर्भूत int main () { फ्लोट num1 = 1 f / 82; फ्लोट num2 = 0; साठी (इंट i = 0; i <738; ++ i) num2 + = num1; printf ("%.7g n", num2);

दुहेरी num3 = 1. 0/82;

दुहेरी num4 = 0;

साठी (इंट i = 0; i <738; ++ i)

num4 + = num3;

printf ("% 15g n", num4);

getchar ();

}

ते खालील गोष्टी छापते: < 9 000031

8 99 99 99 99 99 99 83 9 3 फ्लोट आणि दुहेरीच्या सुस्पष्टता मध्ये थोडासा फरक स्पष्टपणे आढळतो, मात्र फ्लोटपेक्षा दुहेरी अधिक अचूक असल्याचे दिसते.

खालीलप्रमाणे: sqrt () फंक्शन C:

# अंतर्भूत आहे

# अंतर्भूत

int main () {

फ्लोट num1 = sqrt (2382719676512365. 1230112312312312));

दुहेरी संख्या 2 = sqrt (2382719676512365. 1230112312312312);

printf ("% f n", num1);

printf ("% f n", num2);

getchar ();

}

ते खालील आउटपुट देते:

48813108 000000

48813109 678778

येथे, आपण पाहू शकता की दुहेरीमध्ये उत्तर अधिक चांगले आहे.

सर्वसाधारणपणे, फ्लोटिंग-पॉइंट एरिटमॅटिकसाठी डबल वापरणे चांगले आहे, कारण सी मध्ये अनेक मानक गणित फंक्शन्स डबल आणि आधुनिक कॉम्प्यूटर्सवर कार्य करणे अतिशय वेगवान आणि डबल फ्लोटिंग-पॉइंट कॅलक्यूलेशनसाठी कार्यक्षम आहे. यामुळे फ्लोट वापरण्याची गरज कमी करता येते, जोपर्यंत आपण फ्लोटिंग-पॉईंट नंबरच्या संख्येवर (संख्यातील हजारो 0 सह मोठ्या अॅरेचे विचार करत आहात) ऑपरेट करणे आवश्यक आहे किंवा आपण प्रणालीवर चालवत आहात जे दुहेरी-पद्धतींचे समर्थन करत नाही. अचूकपणाचे बिंदू, बहुतेक GPU, low-powered devices आणि काही प्लॅटफॉर्म (एआरएम कॉर्टेक्स- एम 2, कॉर्टेक्स- एम 4, इत्यादी) अद्याप डबल समर्थित नाहीत, तर आपण फ्लोटचा वापर करावा. याव्यतिरिक्त, एक गोष्ट लक्षात ठेवणे आवश्यक आहे की काही विशिष्ट GPU / CPU Float प्रक्रियेत चांगले / कार्यक्षम करतात, जसे की वैक्टर / मेट्रिक्सच्या गणनेत, म्हणजे आपण कोणत्या हार्डवेअर स्पेसिफिकेशन मॅन्युअल / दस्तऐवजीकरणाचा उपयोग करावा एका विशिष्ट मशीनसाठी

आधुनिक कॉम्प्यूटर्सवर लक्ष्यीकरण करताना कोडमध्ये दुहेरीऐवजी फ्लॅट वापरण्याचे काहीच कारण नाही. दुहेरीमध्ये अतिरिक्त सुस्पष्टता कमी करते, परंतु समाप्त होत नाही, गोलाकार त्रुटी किंवा इतर अस्वस्थता होण्याची शक्यता यामुळे कार्यक्रमाच्या इतर भागामध्ये समस्या निर्माण होऊ शकतात. अनेक गणित कार्य किंवा ऑपरेटर दुहेरीमध्ये रूपांतरित करतात आणि परत परत जातात, त्यामुळे आपल्याला त्या नंबरला परत फ्लोटमध्ये टाकण्याची आवश्यकता नाही, कारण हे सुस्पष्टता गमावू शकते.फ्लोटिंग-पॉइंट एरिथमिक्सवर सविस्तर विश्लेषण करण्यासाठी, मी तुम्हाला हे आश्चर्यजनक लेख वाचण्यासाठी शिफारस करतो (// docs oracle. Com / cd / E19957-01 / 806-3568 / ncg_goldberg. Html).

सारांश

तर … थोडक्यात: < आपण फ्लोटचा वापर कसा करावा हे ठिकाण:

जर आपण हार्डवेअरला लक्ष्यित केले असेल तर सिंगल-स्पेसिफिकेशन दुहेरी-सुस्पष्टतापेक्षा वेगवान आहे.

आपला ऍप्लिकेशन फ्लोटिंग पॉईंट एरिथमिक्सचा प्रचंड वापर करते, जसे हजारो 0 च्या संख्येसह.

आपण खूप कमी-स्तर ऑप्टिमायझेशन करीत आहात. उदाहरणार्थ, आपण विशिष्ट CPU निर्देश (i., एसएसई, एसएसई 2, एवीएक्स, इत्यादी) वापरत आहात जे एकाच वेळी अनेक क्रमांक / अॅरे / व्टकर्सवर कार्य करतात.

निष्कर्ष

या लेखातील मी फ्लोट आणि दुहेरी दरम्यान फरक हायलाइट केला आहे, आणि कोणत्या विशिष्ट ठिकाणी वापरली पाहिजे. विशेषतः जर आपण डबल-फ्लोटिंग-पॉइंट अंकगणित वापरण्यामुळे कमी कार्यक्षमतेची शक्यता फारशी कमी असेल तर आपण आधुनिक संगणकास लक्ष्य करीत असतांना बहुतेक ठिकाणी दुहेरी आकड्यापेक्षा अधिक वापरणे चांगले आहे. आपल्याला कोणतेही प्रश्न असल्यास, आपण खाली टिप्पणी विभागात विचारू शकता!