কম্পিউটার টিউটোরিয়াল

C++ এ ফ্লোটিং পয়েন্ট এক্সেপশন বোঝা:কারণ ও সমাধান

ফ্লোটিং-পয়েন্ট ব্যতিক্রম যখন একটি সফ্টওয়্যার একটি সংখ্যাসূচক সংখ্যার উপর একটি অনুপযুক্ত অপারেশন সঞ্চালনের চেষ্টা করে তখন ঘটে। এই ধরনের ব্যতিক্রম ঘটে যখন একজন ব্যবহারকারী অবৈধ ক্রিয়াকলাপ চালানোর চেষ্টা করে, যেমন শূন্য দ্বারা বিভাজন, একটি ঋণাত্মক সংখ্যাকে জোড় সংখ্যা দ্বারা ভাগ করা, একটি ঋণাত্মক সংখ্যার বর্গমূল গ্রহণ করা বা একটি গণনার ওভারফ্লো যা ডাবল ডেটা টাইপের সীমা অতিক্রম করে।

C++ এ, “SIGFPE” সিগন্যাল হ্যান্ডলার ফ্লোটিং পয়েন্ট ব্যতিক্রমগুলি পরিচালনা করে (FPEs)। যখন একজন ব্যবহারকারী উল্লেখিত কাজগুলি সম্পাদন করার চেষ্টা করেন, তখন এই সংকেত হ্যান্ডলার বলা হয়। একবার সিগন্যাল হ্যান্ডলার হস্তক্ষেপ করলে, এটি স্ট্যান্ডার্ড আউটপুটে একটি ত্রুটি বার্তা প্রিন্ট করে এবং প্রোগ্রামটি বন্ধ করে দেয়।

কেন ফ্লোটিং-পয়েন্ট ব্যতিক্রম ঘটে?

ফ্লোটিং পয়েন্ট ব্যতিক্রম প্রোগ্রামিং ত্রুটির কারণে বা যখন একটি প্রোগ্রাম নির্দিষ্টকরণের বাইরে একটি মান প্রক্রিয়া করার চেষ্টা করে তখন ঘটতে পারে। উদাহরণস্বরূপ, যদি একটি প্রোগ্রাম একটি পূর্ণসংখ্যাকে শূন্য দ্বারা ভাগ করার চেষ্টা করে, অথবা যদি একটি প্রোগ্রাম একটি ঋণাত্মক সংখ্যার বর্গমূল নেওয়ার চেষ্টা করে, একটি ফ্লোটিং পয়েন্ট ব্যতিক্রম ঘটবে উপরন্তু, কিছু ফ্লোটিং-পয়েন্ট ব্যতিক্রম প্রসেসর ভুল সনাক্তকরণের কারণে ঘটতে পারে।

অনেক কারণ, যেমন অনুপযুক্ত অপারেশন, আন্ডারফ্লো, ওভারফ্লো, শূন্য দ্বারা বিভাজন, এবং নির্ভুলতার ফলে একটিফ্লোটিং-পয়েন্ট ব্যতিক্রম হতে পারে . আমরা এই বিভাগে একের পর এক এই যুক্তিগুলি কভার করব৷

1:অবৈধ অপারেশন

যখন একজন ব্যবহারকারী একটি অপারেশন প্রকাশ করতে ভুলে যায় বা অপারেশনটির কোন গাণিতিক মান থাকে না, তখন একটি অবৈধ অপারেশনের কারণে প্রোগ্রামটি কার্যকর করতে ব্যর্থ হয়। এর মধ্যে গণনা অন্তর্ভুক্ত যেমন বর্গমূল এবং ঋণাত্মক সংখ্যার লগারিদম, উদাহরণস্বরূপ। যদিও জটিল সংখ্যাগুলির সাথে কাজ করার সময় একটি ঋণাত্মক সংখ্যার বর্গমূল নেওয়া সম্ভব, তবে এটি প্রকাশ করার জন্য কোনও কম্পিউটার-ভিত্তিক প্রক্রিয়া নেই৷

অতিরিক্তভাবে, যদি কোনো সফ্টওয়্যার একটি ফ্লোটিং-পয়েন্ট কার্যকর করে তাহলে একটি ভুল অপারেশন হবে শুধুমাত্র পূর্ণসংখ্যার অবস্থানে অপারেশন। আপনি ডেটা (ফ্লোটিং-পয়েন্ট অপারেশন) এবং সঞ্চিত ডেটার (পূর্ণসংখ্যা) উপর যে অপারেশনটি করার চেষ্টা করছেন তার মধ্যে একটি অমিলের কারণে এটি হয়েছে৷

2:শূন্য বিভাজন

একটি ফ্লোটিং-পয়েন্ট ব্যতিক্রম আপনি যদি একটি পূর্ণসংখ্যাকে শূন্য দিয়ে ভাগ করার চেষ্টা করেন তবে নিক্ষেপ করা হয়। আপনি যখন NaN বা অসীম দ্বারা ভাগ করার চেষ্টা করেন তখন একই জিনিস ঘটে। এখানে কিছু উদাহরণ রয়েছে:1/0, লগ(0)।

3:ওভারফ্লো

যখন একটি অপারেশন একটি মান প্রদান করে যা তার প্রত্যাশিত পরিসরের বাইরে, একটি ওভারফ্লো ব্যতিক্রম ঘটে। এই বিবৃতি অনুসারে মানটি ক্ষুদ্রতম প্রতিনিধিত্বযোগ্য মানের চেয়ে বেশি বা কম।

4:আন্ডারফ্লো

আন্ডারফ্লো ঘটে যখন একটি গণনা এমন একটি ফলাফল দেয় যা একটি ডেটা প্রকারের ধারণ করতে পারে তার চেয়ে কম।

5:সঠিক

যখন একটি অপারেশনের ফলাফল প্রত্যাশিত থেকে ভিন্ন হয়, তখন এটি একটি অযৌক্তিক ব্যতিক্রম হিসাবে পরিচিত। যখন অপারেশনটি অসীম নির্ভুলতা এবং একটি সূচক পরিসীমার সাথে সঞ্চালিত হয়, তখন এটি ঘটে।

কিছু ক্ষেত্রে, এই ধরনের পরিস্থিতি সুন্দরভাবে পরিচালনা করা যেতে পারে। উদাহরণস্বরূপ, যখন একটি প্রোগ্রাম একটি সংখ্যাকে শূন্য দিয়ে ভাগ করার চেষ্টা করে, তখন এটি সাধারণত একটি ত্রুটি বার্তা ফেরত দেওয়া এবং প্রোগ্রামটিকে ক্র্যাশ করার অনুমতি না দিয়ে সদয়ভাবে প্রোগ্রামটি সমাপ্ত করা বাঞ্ছনীয়৷

#অন্তর্ভুক্ত করুন

#অন্তর্ভুক্ত করুন

নামস্থান std;

ব্যবহার করে

float Div(float num, float den)

{

    যদি (ডেন ==0) {

       runtime_error("গণিতের ত্রুটি:0\n দ্বারা ভাগ করার চেষ্টা করা হয়েছে");

   

    রিটার্ন (সংখ্যা / ডেন);

int main()

{

    float num, denom, result;

    সংখ্যা =10;

    denom =0;

    চেষ্টা করুন {

        ফলাফল =Div(num, denom);

            cout <<"ভাগফল হল " <<ফলাফল <

   

    ক্যাচ (রানটাইম_ত্রুটি এবং ই) {

      cout <<"ব্যতিক্রম ঘটেছে" <

   

এই কোডে, Div ফাংশনটিকে main-এর ভিতরে ট্রাই ব্লক দ্বারা ডাকা হয় . যদি ডিনম শূন্য এর সমান নয় , ডিভ ফাংশন ভাগফল প্রদান করে; যদি এটি হয়, একটি রানটাইম ত্রুটি ব্যতিক্রম নিক্ষেপ করা হয় রানটাইম এরর অবজেক্ট e এর সাথে কোন ফাংশনটি কল করার আগে, ক্যাচ ব্লক এই ব্যতিক্রমটিকে আটকায় এবং পাঠ্যটি প্রিন্ট করে“ত্রুটি ঘটেছে” . এটি ব্যতিক্রম চিহ্নিত করতে ব্যবহৃত হয়। ক্লাস স্ট্যান্ডার্ড ব্যতিক্রম, যা stdexcept -এ বর্ণিত হয়েছে হেডার ফাইল, what() নামে একটি ভার্চুয়াল ফাংশন আছে . বার্তাটি "গণিত ত্রুটি:0 দ্বারা ভাগ করার চেষ্টা করা হয়েছে"৷ ফলস্বরূপ মুদ্রিত হয়৷

আউটপুট

C++ এ ফ্লোটিং পয়েন্ট এক্সেপশন বোঝা:কারণ ও সমাধান

ফ্লোটিং পয়েন্ট ব্যতিক্রম প্রতিরোধ করতে C++ এ, ফাংশনে পাস করা সমস্ত পরামিতি পরীক্ষা করা, উপযুক্ত বিন্যাস ব্যবহার করা এবং শূন্য মানের জন্য স্পষ্টভাবে ভাজক পরীক্ষা করা অপরিহার্য। উপরন্তু, ডবল ডাটা টাইপ ব্যবহার করার সময়, যদি প্রোগ্রামের জন্য বৃহত্তর গাণিতিক ফলাফলের প্রয়োজন হয় তাহলে ডাটা টাইপের পরিসর বড় করা গুরুত্বপূর্ণ।

উপসংহার

ফ্লোটিং পয়েন্ট ব্যতিক্রম C++ তে সংখ্যাসূচক মানের অবৈধ ক্রিয়াকলাপ দ্বারা সৃষ্ট হয় এবং সঠিকভাবে চালানোর প্রোগ্রামের ক্ষমতাকে প্রভাবিত করতে পারে। এই ধরনের ত্রুটিগুলি এড়াতে, ফাংশনে পাস করা সমস্ত পরামিতি পরীক্ষা করা এবং উপযুক্ত ডেটা প্রকারগুলি ব্যবহার করা গুরুত্বপূর্ণ৷ উপরন্তু, ফ্লোটিং পয়েন্ট ব্যতিক্রমগুলি ধরার জন্য এটি উপকারী .


  1. HTML বাতিলযোগ্য ইভেন্ট সম্পত্তি

  2. HTML DOM ইনপুট নম্বর ফর্ম সম্পত্তি

  3. অ্যান্ড্রয়েডে বিজ্ঞপ্তির পটভূমির রঙ কীভাবে পরিবর্তন করবেন?

  4. জাভাস্ক্রিপ্টে বিশুদ্ধ করে বিভিন্ন লি-তে ক্লাসের নাম যোগ করুন?