জাভা আন্ত বা দীর্ঘ আদিম ধরণের জন্য পূর্ণসংখ্যার ওভারফ্লো দিয়ে কিছু করে না এবং ইতিবাচক এবং নেতিবাচক পূর্ণসংখ্যার সাথে ওভারফ্লো উপেক্ষা করে।
এই উত্তরটি প্রথমে পূর্ণসংখ্যার ওভারফ্লোটির বর্ণনা দেয়, এটি কীভাবে ঘটতে পারে তার উদাহরণ দেয়, এমনকি অভিব্যক্তির মূল্যায়নের মধ্যবর্তী মানগুলি সহ এবং এটি সংস্থানগুলিতে লিঙ্ক দেয় যা পূর্ণসংখ্যার ওভারফ্লো প্রতিরোধ এবং সনাক্তকরণের জন্য বিশদ কৌশল দেয়।
অপ্রত্যাশিত বা সনাক্ত না করা ওভারফ্লোতে সংখ্যার গাণিতিক এবং এক্সপ্রেশনগুলির ফলাফল একটি সাধারণ প্রোগ্রামিং ত্রুটি। অপ্রত্যাশিত বা সনাক্ত না হওয়া পূর্ণসংখ্যা ওভারফ্লোও একটি সুপরিচিত শোষণযোগ্য সুরক্ষা সমস্যা, বিশেষত এটি অ্যারে, স্ট্যাক এবং তালিকাভুক্ত বস্তুগুলিকে প্রভাবিত করে।
ওভারফ্লো কোনও ধনাত্মক বা নেতিবাচক দিকেই ঘটতে পারে যেখানে ইতিবাচক বা নেতিবাচক মান প্রশ্নের মধ্যে আদিম ধরণের সর্বাধিক বা ন্যূনতম মানগুলির বাইরে। অভিব্যক্তি বা অপারেশন মূল্যায়নের সময় একটি মধ্যবর্তী মানতে ওভারফ্লো দেখা দিতে পারে এবং এমন কোনও অভিব্যক্তি বা অপারেশনের ফলাফলকে প্রভাবিত করতে পারে যেখানে চূড়ান্ত মান সীমার মধ্যে থাকবে বলে আশা করা যায়।
কখনও কখনও নেতিবাচক ওভারফ্লো ভুলভাবে আন্ডারফ্লো বলা হয়। আন্ডারফ্লো হল তখনই ঘটে যখন কোনও মান উপস্থাপনের তুলনায় শূন্যের কাছাকাছি থাকবে। আন্ডারফ্লোটি পূর্ণসংখ্যার গাণিতিক ক্ষেত্রে ঘটে এবং এটি প্রত্যাশিত। পূর্ণসংখ্যার আন্ডারফ্লো ঘটে যখন কোনও পূর্ণসংখ্যার মূল্যায়ন -1 এবং 0 বা 0 এবং 1 এর মধ্যে হবে a কোন ভগ্নাংশের ফলাফলটি 0 এ কেটে যাবে এটি স্বাভাবিক এবং পূর্ণসংখ্যার গাণিতিকের সাথে প্রত্যাশিত এবং ত্রুটি হিসাবে বিবেচিত হয় না। যাইহোক, এটি একটি ব্যতিক্রম কোড নিক্ষেপ হতে পারে। একটি উদাহরণ হ'ল "গাণিতিক অনুভূতি: / শূন্য দ্বারা" ব্যতিক্রম যদি পূর্ণসংখ্যার আন্ডারফ্লোয়ের ফলাফলটি একটি অভিব্যক্তিতে বিভাজক হিসাবে ব্যবহৃত হয়।
নিম্নলিখিত কোড বিবেচনা করুন:
int bigValue = Integer.MAX_VALUE;
int x = bigValue * 2 / 5;
int y = bigValue / x;
x এর ফলস্বরূপ x নির্ধারিত হয় এবং বিগভ্যালু / এক্স এর পরবর্তী মূল্যায়ণটি y এর পরিবর্তে মান 2 নির্ধারিত হওয়ার পরিবর্তে "ArithmeticException: / শূন্য দ্বারা" (অর্থাত শূন্য দ্বারা বিভাজন) একটি ব্যতিক্রম ছুঁড়ে দেয়।
X এর প্রত্যাশিত ফলাফলটি 858,993,458 হবে যা সর্বাধিক 2,147,483,647 এর মান মানের চেয়ে কম। তবে, পূর্ণসংখ্যার মূল্যায়ন থেকে মধ্যবর্তী ফলাফল MA এমএএক্স_ভ্যালু * 2, 4,294,967,294 হবে, যা সর্বাধিক মান মান ছাড়িয়ে যায় এবং 2 এস পরিপূরক পূর্ণসংখ্যার উপস্থাপনা অনুসারে -2 হয়। -2 / 5 এর পরবর্তী মূল্যায়ন 0 কে মূল্যায়ন করে যা এক্সকে নির্ধারিত হয়।
এক্সকে এক্সপ্রেশন হিসাবে এক্সপ্রেশনটির পুনরায় সাজানো যা নীচের কোডটি যখন মূল্যায়ন করা হয় তখন গুণনের আগে ভাগ করে দেয়:
int bigValue = Integer.MAX_VALUE;
int x = bigValue / 5 * 2;
int y = bigValue / x;
এক্স এর ফলাফল 858,993,458 বরাদ্দ করা হয়েছে এবং y নির্ধারিত 2, যা প্রত্যাশিত।
বিগভ্যালু / 5 এর মধ্যবর্তী ফলাফল হল 429,496,729 যা কোনও ইনটেলের সর্বাধিক মান অতিক্রম করে না। 429,496,729 * 2 এর পরবর্তী মূল্যায়ন কোনও পূর্বনির্মাণের সর্বাধিক মান অতিক্রম করবে না এবং প্রত্যাশিত ফলাফলটি এক্সকে নির্ধারিত হবে। Y এর জন্য মূল্যায়ন শূন্য দ্বারা ভাগ হয় না। এক্স এবং ওয়াইয়ের জন্য মূল্যায়ন প্রত্যাশার মতো কাজ করে।
জাভা পূর্ণসংখ্যা মানগুলি 2s পরিপূরক স্বাক্ষরিত পূর্ণসংখ্যার উপস্থাপনা অনুসারে সংরক্ষণ করা হয়। যখন ফলস্বরূপ মানটি সর্বাধিক বা ন্যূনতম পূর্ণসংখ্যার মানগুলির চেয়ে বড় বা ছোট হয়, পরিবর্তে 2 এর পরিপূরক পূর্ণসংখ্যার মান ফলাফল। 2s পরিপূরক আচরণ, যা বেশিরভাগ সাধারণ পূর্ণসংখ্যার গাণিতিক পরিস্থিতি হিসাবে স্পষ্টভাবে ব্যবহার করার জন্য ডিজাইন করা হয়নি এমন পরিস্থিতিতে, ফলস্বরূপ 2s পরিপূরক মান একটি প্রোগ্রামিং লজিক বা গণনা ত্রুটির কারণ হিসাবে উপরের উদাহরণে দেখানো হয়েছিল। একটি দুর্দান্ত উইকিপিডিয়া নিবন্ধ এখানে 2s প্রশংসা বাইনারি পূর্ণসংখ্যার বর্ণনা করেছে: দু'য়ের পরিপূরক - উইকিপিডিয়া
অনিচ্ছাকৃত পূর্ণসংখ্যার ওভারফ্লো এড়ানোর জন্য কৌশল রয়েছে। টেকিনকুইসগুলি প্রাক-শর্ত পরীক্ষা, আপকাস্টিং এবং বিগইন্টিজার ব্যবহার হিসাবে শ্রেণীবদ্ধ করা যেতে পারে।
প্রাক-শর্ত পরীক্ষার মধ্যে পাটিগণিতের ক্রিয়াকলাপ বা অভিব্যক্তিতে যাওয়া মানগুলি পরীক্ষা করে থাকে তা নিশ্চিত করার জন্য যে এই মানগুলির সাথে কোনও ওভারফ্লো ঘটবে না। প্রোগ্রামিং এবং ডিজাইনের জন্য এমন টেস্টিং তৈরি করা দরকার যা নিশ্চিত করে যে ইনপুট মানগুলি ওভারফ্লো হতে না পারে এবং তারপরে নির্ধারণ করে যে ইনপুট মানগুলি দেখা দেয় যা ওভারফ্লো হতে পারে what
আপকাস্টিংয়ে পাটিগণিতের ক্রিয়াকলাপ বা অভিব্যক্তি সম্পাদন করতে বৃহত্তর আদিম ধরণের ব্যবহার করে এবং তারপরে নির্ধারণ করা হয় যে ফলাফলটির মানটি কোনও পূর্ণসংখ্যার জন্য সর্বাধিক বা সর্বনিম্ন মানের বাইরে is এমনকি আপকাস্টিংয়ের পরেও এটি এখনও সম্ভব যে কোনও অপারেশন বা অভিব্যক্তিতে মান বা কিছু মধ্যবর্তী মান আপকাস্ট টাইপ এবং কারণের ওভারফ্লোর সর্বাধিক বা ন্যূনতম মানগুলির বাইরে হবে, এটিও সনাক্ত করা যাবেনা এবং অপ্রত্যাশিত এবং অনাকাঙ্ক্ষিত ফলাফলের কারণ হতে পারে। বিশ্লেষণ বা প্রাক-শর্তগুলির মাধ্যমে, উজানদারীর সাথে অতিরিক্ত প্রবাহ রোধ করা সম্ভব যখন আপকাস্টিং ব্যতীত প্রতিরোধ সম্ভব না বা ব্যবহারিক না হয়। যদি প্রশ্নের মধ্যে পূর্ণসংখ্যাগুলি ইতিমধ্যে দীর্ঘ আদিম ধরণের হয় তবে জাভাতে আদিম ধরণের সাহায্যে আপকাস্টিং সম্ভব নয়।
বিগইন্টিজার কৌশলটিতে বিগইন্টিজার ব্যবহার করে পাথের গাণিতিক ক্রিয়াকলাপের জন্য বা বিগইন্টিজার ব্যবহার করে এমন লাইব্রেরি পদ্ধতি ব্যবহার করে অভিব্যক্তি প্রকাশ করা হয়। BigInteger ওভারফ্লো হয় না। এটি প্রয়োজনীয় হলে সমস্ত উপলব্ধ মেমরি ব্যবহার করবে। এর গাণিতিক পদ্ধতিগুলি সাধারণত পূর্ণসংখ্যার ক্রিয়াকলাপের তুলনায় সামান্য কম দক্ষ। এটি এখনও সম্ভব যে বিগইন্টিজার ব্যবহার করে ফলাফল কোনও পূর্ণসংখ্যার জন্য সর্বাধিক বা ন্যূনতম মানের চেয়েও বেশি হতে পারে, তবে ফলাফলটি গাণিতিকগুলিতে ওভারফ্লো হবে না। প্রোগ্রামিং এবং ডিজাইনের এখনও নির্ধারণ করতে হবে যদি বিগইন্টিজার ফলাফল পছন্দসই আদিম ফলাফলের জন্য সর্বাধিক বা ন্যূনতম মানগুলির বাইরে থাকে, যেমন, আন্ত বা দীর্ঘ long
কার্নেগি মেলন সফটওয়্যার ইঞ্জিনিয়ারিং ইনস্টিটিউটের সিইআরটি প্রোগ্রাম এবং ওরাকল নিরাপদ জাভা প্রোগ্রামিংয়ের জন্য একটি মান সেট তৈরি করেছে। মানগুলির মধ্যে অন্তর্ভুক্ত হ'ল পূর্ণসংখ্যা ওভারফ্লো প্রতিরোধ এবং সনাক্তকরণের কৌশল। মানটি এখানে নিখরচায় অ্যাক্সেসযোগ্য অনলাইন সংস্থান হিসাবে প্রকাশিত হয়: জাভার জন্য সিইআরটি ওরাকল সিকিউর কোডিং স্ট্যান্ডার্ড
পূর্ণসংখ্যা ওভারফ্লো প্রতিরোধ বা সনাক্তকরণের কোডিং কৌশলগুলির ব্যবহারিক উদাহরণগুলির মধ্যে স্ট্যান্ডার্ডের বিভাগটি এখানে রয়েছে: NUM00-J। পূর্ণসংখ্যা ওভারফ্লো সনাক্ত করুন বা প্রতিরোধ করুন
জাভার জন্য দ্য সিইআরটি ওরাকল সিকিউর কোডিং স্ট্যান্ডার্ডের বই ফর্ম এবং পিডিএফ ফর্মটি উপলব্ধ।