1. वास्तविक संख्या पूर्ण करणे

आपण आधीच चर्चा केल्याप्रमाणे, जेव्हा वास्तविक संख्या व्हेरिएबलला नियुक्त केली जाते int, तेव्हा ती नेहमी जवळच्या लहान पूर्णांकापर्यंत पूर्ण केली जाते — अपूर्णांकाचा भाग फक्त टाकून दिला जातो.

परंतु अशा परिस्थितीची कल्पना करणे सोपे आहे जेव्हा एखाद्या अपूर्णांकाची संख्या जवळच्या पूर्णांकापर्यंत एकतर दिशेने पूर्ण करणे किंवा अगदी पूर्णांक करणे आवश्यक आहे. या प्रकरणात तुम्ही काय करता?

यासाठी आणि अनेक तत्सम परिस्थितींसाठी, Java मध्ये Mathवर्ग आहे, ज्यामध्ये round(), ceil(), आणि floor()पद्धती आहेत.


Math.round()पद्धत

पद्धत Math.round()जवळच्या पूर्णांकापर्यंत संख्या पूर्ण करते:

long x = Math.round(real_number)

परंतु येथे आणखी एक सूक्ष्मता आहे: ही पद्धत पूर्णांक मिळवते long(नाही int). कारण वास्तविक संख्या खूप मोठी असू शकते, Java च्या निर्मात्यांनी Java चा सर्वात मोठा उपलब्ध पूर्णांक प्रकार वापरण्याचा निर्णय घेतला: long.

त्यानुसार, जर एखाद्या प्रोग्रामरला व्हेरिएबलला निकाल द्यावयाचा असेल int, तर तिने कंपाइलरला स्पष्टपणे सूचित केले पाहिजे की ती डेटाची संभाव्य हानी स्वीकारते (परिणामी संख्या एखाद्या प्रकारात बसत नसेल तर int).

int x = (int) Math.round(real_number)

उदाहरणे:

विधान परिणाम
int x = (int) Math.round(4.1);
4
int x = (int) Math.round(4.5);
5
int x = (int) Math.round(4.9);
5

Math.ceil()पद्धत

ही Math.ceil()पद्धत एका संख्येला पूर्णांकापर्यंत पूर्ण करते . येथे उदाहरणे आहेत:

विधान परिणाम
int x = (int) Math.ceil(4.1);
5
int x = (int) Math.ceil(4.5);
5
int x = (int) Math.ceil(4.9);
5

Math.floor()पद्धत

पद्धत Math.floor()एका संख्येला पूर्णांकापर्यंत पूर्ण करते . येथे उदाहरणे आहेत:

विधान परिणाम
int x = (int) Math.floor(4.1);
4
int x = (int) Math.floor(4.5);
4
int x = (int) Math.floor(4.9);
4

अर्थात, संख्या पूर्णांकापर्यंत पूर्ण करताना , फक्त टाइप कास्ट ऑपरेटर वापरणे सोपे आहे:(int)

विधान परिणाम
int x = (int) 4.9
4

तुम्हाला ही नावे लक्षात ठेवणे कठीण वाटत असल्यास, एक लहान इंग्रजी धडा मदत करेल:

  • Mathम्हणजे गणित
  • Roundम्हणजे गोल
  • Ceilingम्हणजे कमाल मर्यादा
  • Floorम्हणजे मजला

2. फ्लोटिंग-पॉइंट संख्यांची रचना कशी केली जाते

प्रकार पासून ते doubleश्रेणीत मूल्ये संचयित करू शकतो . मूल्यांची ही प्रचंड श्रेणी (प्रकाराच्या तुलनेत ) पूर्णांक प्रकारांपेक्षा पूर्णतः भिन्न अंतर्गत रचना आहे या वस्तुस्थितीद्वारे स्पष्ट केली आहे . अंतर्गत, प्रकार त्याचे मूल्य दोन संख्या म्हणून एन्कोड करतो: पहिल्याला मँटिसा म्हणतात , आणि दुसऱ्याला घातांक म्हणतात .-1.7*10308+1.7*10308intdoublefloatdouble

समजा आपल्याकडे संख्या आहे 123456789आणि ते doubleव्हेरिएबल संग्रहित करू. जेव्हा आपण करतो, तेव्हा संख्या मधे रूपांतरित केली जाते आणि अंतर्गत प्रकार दोन संख्या संग्रहित करतो — आणि . महत्त्वाचा ("संख्येचा महत्त्वाचा भाग" किंवा मँटिसा) लाल रंगात हायलाइट केला जातो, तर घातांक निळ्यामध्ये हायलाइट केला जातो.1.23456789*108double234567898

हा दृष्टिकोन खूप मोठ्या आणि अगदी लहान दोन्ही संग्रहित करणे शक्य करते. परंतु संख्येचे प्रतिनिधित्व 8 बाइट्स (64 बिट्स) पर्यंत मर्यादित असल्यामुळे आणि काही बिट्स घातांक ( तसेच मॅन्टिसाचे चिन्ह आणि घातांकाचे चिन्ह) संग्रहित करण्यासाठी वापरले जातात, मॅन्टिसाचे प्रतिनिधित्व करण्यासाठी उपलब्ध जास्तीत जास्त अंक 15 आहे .

वास्तविक संख्यांची रचना कशी केली जाते याचे हे अतिशय सोपे वर्णन आहे.


3. वास्तविक संख्येसह कार्य करताना अचूकता कमी होणे

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

नवशिक्या प्रोग्रामरसाठी ही शेवटची वस्तुस्थिती थोडी मनाला भिडणारी आहे.

जर आपण मधून वजा केले तर आपल्याला मिळेल .1/109109109

मूलतः भिन्न स्केलवर संख्या वजा करणे स्पष्टीकरण
 1000000000.000000000;
-         0.000000001;
 1000000000.000000000;
दुसरी संख्या अत्यंत लहान आहे , ज्यामुळे त्याचे महत्त्व असेल आणि (राखाडी रंगात हायलाइट केलेले) दुर्लक्ष केले जाईल. 15 महत्त्वपूर्ण अंक केशरी रंगात हायलाइट केले आहेत.

आपण काय म्हणू शकतो, प्रोग्रामिंग हे गणितासारखे नाही.


4. वास्तविक संख्यांची तुलना करताना समस्या

प्रोग्रामर जेव्हा वास्तविक संख्यांची तुलना करतात तेव्हा आणखी एक धोका असतो. वास्तविक संख्येसह कार्य करताना हे उद्भवते, कारण राउंड-ऑफ त्रुटी जमा होऊ शकतात. परिणाम असा होतो की अशी परिस्थिती असते जेव्हा वास्तविक संख्या समान असणे अपेक्षित असते, परंतु ते तसे नसतात. किंवा उलट: संख्या भिन्न असणे अपेक्षित आहे, परंतु ते समान आहेत.

उदाहरण:

विधान स्पष्टीकरण
double a = 1000000000.0;
double b = 0.000000001;
double c = a - b;
व्हेरिएबलचे मूल्य a असेल 1000000000.0
व्हेरिएबलचे मूल्य c असेल 1000000000.0
(व्हेरिएबलमधील संख्या b खूपच लहान आहे)

वरील उदाहरणात, aआणि cसमान नसावे, परंतु ते आहेत.

किंवा दुसरे उदाहरण घेऊ:

विधान स्पष्टीकरण
double a = 1.00000000000000001;
double b = 1.00000000000000002;
व्हेरिएबलचे मूल्य a असेल 1.0
व्हेरिएबलचे मूल्य b असेल1.0

5. बद्दल एक मनोरंजक तथ्यstrictfp

Java मध्ये एक विशेष strictfpकीवर्ड आहे ( strict f loating p oint ), जो इतर प्रोग्रामिंग भाषांमध्ये आढळत नाही. आणि तुम्हाला याची गरज का आहे हे तुम्हाला माहीत आहे का? हे फ्लोटिंग-पॉइंट नंबरसह ऑपरेशन्सची अचूकता खराब करते . ते कसे बनले याची कथा येथे आहे:

Java चे निर्माते:
जावा खूप लोकप्रिय व्हावे आणि जास्तीत जास्त उपकरणांवर जावा प्रोग्राम चालवावा अशी आमची खरोखर इच्छा आहे. म्हणून आम्ही हे सुनिश्चित केले की Java मशीनचे तपशील असे सांगतात की सर्व प्रोग्राम्स सर्व प्रकारच्या उपकरणांवर सारखेच चालले पाहिजेत!
इंटेल प्रोसेसरचे निर्माते:
अहो, प्रत्येकजण! आम्ही आमचे प्रोसेसर सुधारले आहेत आणि आता सर्व वास्तविक संख्या आमच्या प्रोसेसरमध्ये 8-बाइट्सऐवजी 10-बाइट्स वापरून दर्शविल्या जातात. अधिक बाइट्स म्हणजे अधिक लक्षणीय अंक. याचा अर्थ काय? ते बरोबर आहे! आता तुमची वैज्ञानिक गणना अधिक अचूक होईल!
शास्त्रज्ञ आणि अति-तंतोतंत गणनेमध्ये सहभागी असलेले प्रत्येकजण:
मस्त! चांगले केले. छान बातमी!
Java चे निर्माते:
नाही-नाही-नाही, मित्रांनो! आम्ही तुम्हाला आधीच सांगितले आहे की सर्व Java प्रोग्राम्स सर्व उपकरणांवर सारखेच चालले पाहिजेत . इंटेल प्रोसेसरमध्ये 10-बाइट रिअल नंबर वापरण्याची क्षमता आम्ही जबरदस्तीने अक्षम करणार आहोत.
आता पुन्हा सर्वकाही ठीक आहे! आमचे आभार मानू नका.
शास्त्रज्ञ आणि अति-तंतोतंत गणनेमध्ये सहभागी असलेले प्रत्येकजण:
तू पूर्णपणे वेडा झाला आहेस का? सर्वकाही जसे होते तसे त्वरीत परत मिळवा!
Java चे निर्माते:
मित्रांनो, हे तुमच्याच भल्यासाठी आहे! फक्त कल्पना करा: सर्व जावा प्रोग्राम सर्व उपकरणांवर सारखेच चालतात . ते खूप छान आहे!
शास्त्रज्ञ आणि अति-तंतोतंत गणनेमध्ये सहभागी असलेले प्रत्येकजण:
नाही. हे अजिबात छान नाही. पटकन सर्वकाही कसे होते ते परत ठेवा! किंवा आम्ही तुमचा Java कुठे ठेवू हे माहित आहे?
Java चे निर्माते:
हम्म. तू लगेच का नाही बोललास? नक्कीच, आम्ही ते परत ठेवू.
आम्ही नवीनतम प्रोसेसरची सर्व वैशिष्ट्ये वापरण्याची तुमची क्षमता पुनर्संचयित केली आहे.
तसे... आम्ही खास strictfpभाषेत कीवर्ड जोडला. जर तुम्ही फंक्शनच्या नावापुढे ते लिहिलं, तर त्या फंक्शनमधील रिअल नंबर्सचा समावेश असलेली सर्व ऑपरेशन्स सर्व उपकरणांवर तितकीच वाईट असतील !