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)

উদাহরণ:

বিবৃতি ফলাফল
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

জাভা-এর একটি বিশেষ strictfpকীওয়ার্ড রয়েছে ( strict f loating p oint ), যা অন্যান্য প্রোগ্রামিং ভাষায় পাওয়া যায় না। এবং আপনি কেন এটা প্রয়োজন জানেন? এটি ফ্লোটিং-পয়েন্ট সংখ্যার সাথে ক্রিয়াকলাপের যথার্থতাকে খারাপ করে । এটি কীভাবে হয়েছিল তার গল্পটি এখানে রয়েছে:

জাভা নির্মাতারা:
আমরা সত্যিই চাই জাভা সুপার জনপ্রিয় হোক এবং যতটা সম্ভব ডিভাইসে জাভা প্রোগ্রাম চালানো হোক। তাই আমরা নিশ্চিত করেছি যে জাভা মেশিনের স্পেসিফিকেশনে বলা হয়েছে যে সমস্ত প্রোগ্রাম সব ধরনের ডিভাইসে একইভাবে চলতে হবে!
ইন্টেল প্রসেসরের নির্মাতারা:
হেই সবাই! আমরা আমাদের প্রসেসরগুলিকে উন্নত করেছি, এবং এখন আমাদের প্রসেসরের ভিতরে 8-বাইটের পরিবর্তে 10-বাইট ব্যবহার করে সমস্ত বাস্তব সংখ্যা উপস্থাপন করা হয়। আরো বাইট মানে আরো উল্লেখযোগ্য সংখ্যা। ওটার মানে কি? সেটা ঠিক! এখন আপনার বৈজ্ঞানিক হিসাব আরও সঠিক হবে!
বিজ্ঞানীরা এবং অতি-নির্ভুল গণনার সাথে জড়িত সবাই:
শান্ত! সাবাশ. চমৎকার খবর!
জাভা নির্মাতারা:
না-না-না, বন্ধুরা! আমরা ইতিমধ্যেই আপনাকে বলেছি যে সমস্ত জাভা প্রোগ্রামগুলি অবশ্যই সমস্ত ডিভাইসে একইভাবে চালাতে হবে ৷ আমরা জোরপূর্বক ইন্টেল প্রসেসরের মধ্যে 10-বাইট বাস্তব সংখ্যা ব্যবহার করার ক্ষমতা অক্ষম করতে যাচ্ছি।
এখন আবার সবকিছু ঠিক আছে! আমাদের ধন্যবাদ না.
বিজ্ঞানীরা এবং অতি-নির্ভুল গণনার সাথে জড়িত সবাই:
আপনি কি সম্পূর্ণ পাগল হয়ে গেছেন? দ্রুত সবকিছু যেমন ছিল ফিরে পান!
জাভা নির্মাতারা:
বন্ধুরা, এটি আপনার নিজের ভালোর জন্য! শুধু কল্পনা করুন: সমস্ত জাভা প্রোগ্রাম সমস্ত ডিভাইসে একই ভাবে চলে । এটা খুব উপভোগ্য!
বিজ্ঞানীরা এবং অতি-নির্ভুল গণনার সাথে জড়িত সবাই:
না। এটা মোটেও ভালো না। দ্রুত সবকিছু ফিরিয়ে দিন কেমন ছিল! অথবা আমরা আপনার জাভা কোথায় রাখব জানেন?
জাভা নির্মাতারা:
হুম। তুমি এখুনি বললে না কেন? অবশ্যই, আমরা এটি ফিরিয়ে দেব।
আমরা সর্বশেষ প্রসেসরের সমস্ত বৈশিষ্ট্য ব্যবহার করার আপনার ক্ষমতা পুনরুদ্ধার করেছি।
যাইহোক... আমরা strictfpভাষাতে বিশেষভাবে কীওয়ার্ড যোগ করেছি। আপনি যদি একটি ফাংশনের নামের আগে এটি লিখেন, তবে সেই ফাংশনের ভিতরে বাস্তব সংখ্যা জড়িত সমস্ত ক্রিয়াকলাপ সমস্ত ডিভাইসে সমানভাবে খারাপ হবে !