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)
उदाहरणे:
| विधान | परिणाम |
|---|---|
|
|
|
|
|
|
Math.ceil()पद्धत
ही Math.ceil()पद्धत एका संख्येला पूर्णांकापर्यंत पूर्ण करते . येथे उदाहरणे आहेत:
| विधान | परिणाम |
|---|---|
|
|
|
|
|
|
Math.floor()पद्धत
पद्धत Math.floor()एका संख्येला पूर्णांकापर्यंत पूर्ण करते . येथे उदाहरणे आहेत:
| विधान | परिणाम |
|---|---|
|
|
|
|
|
|
अर्थात, संख्या पूर्णांकापर्यंत पूर्ण करताना , फक्त टाइप कास्ट ऑपरेटर वापरणे सोपे आहे:(int)
| विधान | परिणाम |
|---|---|
|
|
तुम्हाला ही नावे लक्षात ठेवणे कठीण वाटत असल्यास, एक लहान इंग्रजी धडा मदत करेल:
Mathम्हणजे गणितRoundम्हणजे गोलCeilingम्हणजे कमाल मर्यादाFloorम्हणजे मजला
2. फ्लोटिंग-पॉइंट संख्यांची रचना कशी केली जाते
प्रकार पासून ते doubleश्रेणीत मूल्ये संचयित करू शकतो . मूल्यांची ही प्रचंड श्रेणी (प्रकाराच्या तुलनेत ) पूर्णांक प्रकारांपेक्षा पूर्णतः भिन्न अंतर्गत रचना आहे या वस्तुस्थितीद्वारे स्पष्ट केली आहे . अंतर्गत, प्रकार त्याचे मूल्य दोन संख्या म्हणून एन्कोड करतो: पहिल्याला मँटिसा म्हणतात , आणि दुसऱ्याला घातांक म्हणतात .-1.7*10308+1.7*10308intdoublefloatdouble
समजा आपल्याकडे संख्या आहे 123456789आणि ते doubleव्हेरिएबल संग्रहित करू. जेव्हा आपण करतो, तेव्हा संख्या मधे रूपांतरित केली जाते आणि अंतर्गत प्रकार दोन संख्या संग्रहित करतो — आणि . महत्त्वाचा ("संख्येचा महत्त्वाचा भाग" किंवा मँटिसा) लाल रंगात हायलाइट केला जातो, तर घातांक निळ्यामध्ये हायलाइट केला जातो.1.23456789*108double234567898
हा दृष्टिकोन खूप मोठ्या आणि अगदी लहान दोन्ही संग्रहित करणे शक्य करते. परंतु संख्येचे प्रतिनिधित्व 8 बाइट्स (64 बिट्स) पर्यंत मर्यादित असल्यामुळे आणि काही बिट्स घातांक ( तसेच मॅन्टिसाचे चिन्ह आणि घातांकाचे चिन्ह) संग्रहित करण्यासाठी वापरले जातात, मॅन्टिसाचे प्रतिनिधित्व करण्यासाठी उपलब्ध जास्तीत जास्त अंक 15 आहे .
वास्तविक संख्यांची रचना कशी केली जाते याचे हे अतिशय सोपे वर्णन आहे.
3. वास्तविक संख्येसह कार्य करताना अचूकता कमी होणे
वास्तविक संख्यांसह कार्य करताना, नेहमी लक्षात ठेवा की वास्तविक संख्या अचूक नसतात . दशांश ते बायनरीमध्ये रूपांतरित करताना नेहमी गोलाकार त्रुटी आणि रूपांतरण त्रुटी असू शकतात . याव्यतिरिक्त, मूलभूतपणे भिन्न स्केलवर संख्या जोडताना/वजाबाकी करताना त्रुटीचा सर्वात सामान्य स्त्रोत म्हणजे अचूकता कमी होणे .
नवशिक्या प्रोग्रामरसाठी ही शेवटची वस्तुस्थिती थोडी मनाला भिडणारी आहे.
जर आपण मधून वजा केले तर आपल्याला मिळेल .1/109109109
| मूलतः भिन्न स्केलवर संख्या वजा करणे | स्पष्टीकरण |
|---|---|
|
दुसरी संख्या अत्यंत लहान आहे , ज्यामुळे त्याचे महत्त्व असेल आणि (राखाडी रंगात हायलाइट केलेले) दुर्लक्ष केले जाईल. 15 महत्त्वपूर्ण अंक केशरी रंगात हायलाइट केले आहेत. |
आपण काय म्हणू शकतो, प्रोग्रामिंग हे गणितासारखे नाही.
4. वास्तविक संख्यांची तुलना करताना समस्या
प्रोग्रामर जेव्हा वास्तविक संख्यांची तुलना करतात तेव्हा आणखी एक धोका असतो. वास्तविक संख्येसह कार्य करताना हे उद्भवते, कारण राउंड-ऑफ त्रुटी जमा होऊ शकतात. परिणाम असा होतो की अशी परिस्थिती असते जेव्हा वास्तविक संख्या समान असणे अपेक्षित असते, परंतु ते तसे नसतात. किंवा उलट: संख्या भिन्न असणे अपेक्षित आहे, परंतु ते समान आहेत.
उदाहरण:
| विधान | स्पष्टीकरण |
|---|---|
|
व्हेरिएबलचे मूल्य a असेल 1000000000.0व्हेरिएबलचे मूल्य c असेल 1000000000.0(व्हेरिएबलमधील संख्या b खूपच लहान आहे) |
वरील उदाहरणात, aआणि cसमान नसावे, परंतु ते आहेत.
किंवा दुसरे उदाहरण घेऊ:
| विधान | स्पष्टीकरण |
|---|---|
|
व्हेरिएबलचे मूल्य a असेल 1.0व्हेरिएबलचे मूल्य b असेल1.0 |
5. बद्दल एक मनोरंजक तथ्यstrictfp
Java मध्ये एक विशेष strictfpकीवर्ड आहे ( strict f loating p oint ), जो इतर प्रोग्रामिंग भाषांमध्ये आढळत नाही. आणि तुम्हाला याची गरज का आहे हे तुम्हाला माहीत आहे का? हे फ्लोटिंग-पॉइंट नंबरसह ऑपरेशन्सची अचूकता खराब करते . ते कसे बनले याची कथा येथे आहे:
GO TO FULL VERSION