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*10308
int
double
float
double
ধরা যাক আমাদের সংখ্যা আছে 123456789
এবং এটি একটি double
পরিবর্তনশীল সংরক্ষণ করুন। যখন আমরা করি, সংখ্যাটি তে রূপান্তরিত হয় এবং অভ্যন্তরীণভাবে টাইপ দুটি সংখ্যা সংরক্ষণ করে — এবং . তাৎপর্যপূর্ণ ("সংখ্যার উল্লেখযোগ্য অংশ" বা ম্যান্টিসা) লাল রঙে হাইলাইট করা হয়েছে, যখন সূচকটি নীল রঙে হাইলাইট করা হয়েছে।1.23456789*108
double
23456789
8
এই পদ্ধতিটি খুব বড় সংখ্যা এবং খুব ছোট উভয়ই সংরক্ষণ করা সম্ভব করে তোলে। কিন্তু যেহেতু সংখ্যার উপস্থাপনা 8 বাইট (64 বিট) এর মধ্যে সীমাবদ্ধ এবং কিছু বিট সূচক ( সেসাথে ম্যান্টিসার চিহ্ন এবং সূচকের চিহ্ন) সংরক্ষণ করতে ব্যবহৃত হয়, তাই ম্যান্টিসার প্রতিনিধিত্ব করার জন্য উপলব্ধ সর্বাধিক সংখ্যাগুলি হল 15 _
বাস্তব সংখ্যাগুলি কীভাবে গঠন করা হয় তার এটি একটি খুব সরলীকৃত বর্ণনা।
3. বাস্তব সংখ্যা নিয়ে কাজ করার সময় নির্ভুলতা হারান
বাস্তব সংখ্যা নিয়ে কাজ করার সময়, সবসময় মনে রাখবেন যে বাস্তব সংখ্যা সঠিক নয় । দশমিক থেকে বাইনারিতে রূপান্তর করার সময় সর্বদা রাউন্ডিং ত্রুটি এবং রূপান্তর ত্রুটি থাকতে পারে । উপরন্তু, ত্রুটির সবচেয়ে সাধারণ উৎস হল আমূল ভিন্ন স্কেলে সংখ্যা যোগ/বিয়োগ করার সময় নির্ভুলতা হারানো ।
এই শেষ ঘটনাটি নবীন প্রোগ্রামারদের জন্য একটু মন ছুঁয়ে যায়।
থেকে বিয়োগ করলে আমরা পাব ।1/109
109
109
আমূল ভিন্ন স্কেলে সংখ্যা বিয়োগ করা | ব্যাখ্যা |
---|---|
|
দ্বিতীয় সংখ্যাটি অত্যন্ত ছোট , যা এর তাৎপর্য সৃষ্টি করবে এবং (ধূসর রঙে হাইলাইট করা) উপেক্ষা করা হবে। 15 টি উল্লেখযোগ্য সংখ্যা কমলা রঙে হাইলাইট করা হয়েছে। |
আমরা কি বলতে পারি, প্রোগ্রামিং গণিতের মতো নয়।
4. বাস্তব সংখ্যার তুলনা করার সময় বিপত্তি
প্রোগ্রামাররা যখন বাস্তব সংখ্যার তুলনা করে তখন তাদের জন্য অপেক্ষা করা আরেকটি বিপদ। বাস্তব সংখ্যার সাথে কাজ করার সময় এটি উদ্ভূত হয়, কারণ রাউন্ড-অফ ত্রুটিগুলি জমা হতে পারে। ফলাফল হল এমন পরিস্থিতি রয়েছে যখন বাস্তব সংখ্যা সমান হবে বলে আশা করা হয়, কিন্তু তারা তা নয়। অথবা তদ্বিপরীত: সংখ্যা ভিন্ন হতে প্রত্যাশিত, কিন্তু তারা সমান.
উদাহরণ:
বিবৃতি | ব্যাখ্যা |
---|---|
|
ভেরিয়েবলের মান a হবে 1000000000.0 ভেরিয়েবলের মান c হবে 1000000000.0 (ভেরিয়েবলের সংখ্যা b অত্যধিক ছোট) |
উপরের উদাহরণে, a
এবং c
সমান হওয়া উচিত নয়, তবে তারা।
অথবা অন্য একটি উদাহরণ নেওয়া যাক:
বিবৃতি | ব্যাখ্যা |
---|---|
|
ভেরিয়েবলের মান a হবে 1.0 ভেরিয়েবলের মান b হবে1.0 |
5. সম্পর্কে একটি আকর্ষণীয় তথ্যstrictfp
জাভা-এর একটি বিশেষ strictfp
কীওয়ার্ড রয়েছে ( strict f loating p oint ), যা অন্যান্য প্রোগ্রামিং ভাষায় পাওয়া যায় না। এবং আপনি কেন এটা প্রয়োজন জানেন? এটি ফ্লোটিং-পয়েন্ট সংখ্যার সাথে ক্রিয়াকলাপের যথার্থতাকে খারাপ করে । এটি কীভাবে হয়েছিল তার গল্পটি এখানে রয়েছে:
GO TO FULL VERSION