1. वास्तविक संख्याओं का पूर्णांक बनाना
जैसा कि हमने पहले ही चर्चा की है, जब एक वास्तविक संख्या को एक intचर के लिए निर्दिष्ट किया जाता है, तो इसे हमेशा निकटतम छोटे पूर्णांक तक गोल किया जाता है - भिन्नात्मक भाग को बस छोड़ दिया जाता है।
लेकिन ऐसी स्थिति की कल्पना करना आसान है जब किसी भिन्नात्मक संख्या को किसी भी दिशा में निकटतम पूर्णांक तक गोल करने की आवश्यकता होती है या गोल भी किया जाता है। आप इस मामले में क्या करते हैं?
इसके लिए और इसी तरह की कई स्थितियों के लिए, जावा में क्लास है Math, जिसमें round(),, ceil()और floor()मेथड्स हैं।
Math.round()तरीका
विधि Math.round()किसी संख्या को निकटतम पूर्णांक तक ले जाती है:
long x = Math.round(real_number)
लेकिन यहां एक और अति सूक्ष्म अंतर है: यह विधि एक longपूर्णांक (नहीं एक int) देता है। क्योंकि वास्तविक संख्या बहुत बड़ी हो सकती है, जावा के रचनाकारों ने जावा के सबसे बड़े उपलब्ध पूर्णांक प्रकार का उपयोग करने का निर्णय लिया: 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
जावा में एक विशेष strictfpकीवर्ड ( सख्त f loating p oint ) है, जो अन्य प्रोग्रामिंग भाषाओं में नहीं पाया जाता है। और क्या आप जानते हैं कि आपको इसकी आवश्यकता क्यों है? यह फ़्लोटिंग-पॉइंट नंबरों के साथ संचालन की सटीकता को खराब करता है । यह कैसे हुआ इसकी कहानी यहां दी गई है:
GO TO FULL VERSION