INT_MIN-1 একটি আন্ডারফ্লো বা প্রবাহিত?


10

মনে আছে মনে হচ্ছে আমি পড়ছিলাম

  • underflowমানে আপনার খুব ছোট মাত্রা রয়েছে যা আর কোনও ধরণের উপস্থাপিত হতে পারে না
  • overflowমানে আপনার খুব বেশি মাত্রা রয়েছে যা আর কোনও ধরণের উপস্থাপিত হতে পারে না

তবে, অনুশীলনে আমি বুঝতে পারি যে পদগুলি এমন ব্যবহার করা হয়

  • underflowমানে আপনার খুব ছোট মান রয়েছে যা আর কোনও ধরণের উপস্থাপিত হতে পারে না
  • overflowমানে আপনার খুব বেশি মান রয়েছে যা আর কোনও ধরণের উপস্থাপিত হতে পারে না

এখানে ব্যবহার করার সঠিক অর্থ কী? পদগুলি পূর্ণসংখ্যা এবং ভাসমান পয়েন্টের ধরণের জন্য আলাদাভাবে সংজ্ঞায়িত হয়?


2
সাধারণত, "আন্ডারফ্লো" শব্দটি ভাসমান পয়েন্ট গণিতের জন্য সংরক্ষিত বলে মনে হয়। পূর্ণসংখ্যার সঙ্গে, আমি সাধারণত বলুন "ওভারফ্লো" এটা কিনা নির্বিশেষে INT_MIN - 1বাINT_MAX + 1
চার্লস স্যালভিয়া

উত্তর:


15

আমি এই বিষয়ে সত্যই কোনও "প্রামাণিক" উত্সটি খুঁজে পাচ্ছি না, কারণ এটি সম্ভবত একটি সম্মেলনের বিষয়, এবং পরিভাষা প্রায়শই খুব বেমানান। তবে, রবার্ট সিকর্ডের " সি এবং সি ++ এ সিকিউর কোডিং " এর নিম্নোক্ত অংশগুলি পরিস্থিতি সম্পর্কে আমার বোঝার সংস্থান করে :

একটি পূর্ণসংখ্যা ওভারফ্লো তখন ঘটে যখন কোনও পূর্ণসংখ্যা তার সর্বাধিক মানের বাইরে বা তার সর্বনিম্ন মান 3 এর বাইরে হ্রাস পায় । পূর্ণসংখ্যার ওভারফ্লোগুলি অন্তর্নিহিত উপস্থাপনার সাথে নিবিড়ভাবে সম্পর্কিত।

পাদটীকাটি আরও বলে:

[3] একটি পূর্ণসংখ্যার সর্বনিম্ন মানের চেয়ে কম হওয়াটিকে প্রায়শই একটি পূর্ণসংখ্যার আন্ডারফ্লো হিসাবে উল্লেখ করা হয় , যদিও প্রযুক্তিগতভাবে এই শব্দটি একটি ভাসমান বিন্দু শর্তকে বোঝায়।

আমরা একে পূর্ণসংখ্যার ওভারফ্লো বলার কারণ হ'ল ধরণের পরিমাণ উপস্থাপনের জন্য পর্যাপ্ত জায়গা উপলব্ধ নেই। যে অর্থে, এটা একটা বাফার ওভারফ্লো অনুরূপ (বরং আসলে বাফার সীমানা, এটি সাধারণত চিত্র প্রদর্শনীতেও মোড়ানো-অ্যারাউন্ড আচরণ উত্তরণ চেয়ে ব্যতীত। *) এই দৃষ্টিকোণ থেকে, সেখানে মধ্যে কোনো ধারণাগত পার্থক্য আছে INT_MIN - 1এবং INT_MAX + 1। উভয় ক্ষেত্রেই উভয়ই intমান উপস্থাপনের জন্য ডেটা টাইপের পর্যাপ্ত স্থান নেই - সুতরাং আমাদের যা আছে তা একটি ওভারফ্লো

এটি উল্লেখ করাও কার্যকর হতে পারে যে x86 এবং x86_64 প্রসেসরের আর্কিটেকচারে, পতাকা নিবন্ধগুলিতে একটি ওভারফ্লো বিট অন্তর্ভুক্ত রয়েছে । ওভারফ্লো বিট সেট হয় যখন একটি স্বাক্ষরিত পূর্ণসংখ্যা গণিত অপারেশন ওভারফ্লো হয়। এক্সপ্রেশনটি INT_MIN - 1ওভারফ্লো বিট সেট করবে। (কোনও "আন্ডারফ্লো" বিট নেই)) সুতরাং স্পষ্টতই, এএমডি এবং ইন্টেলের প্রকৌশলীরা একটি পূর্ণসংখ্যার গাণিতিক ক্রিয়াকলাপের ফলাফলটি বর্ণনা করতে "ওভারফ্লো" শব্দটি ব্যবহার করেন যা ডেটা টাইপের ক্ষেত্রে অনেকগুলি বিট থাকে, তা নির্বিশেষে মান সংখ্যাটি খুব বড় বা খুব ছোট।


* আসলে, সি-তে স্বাক্ষরিত পূর্ণসংখ্যা ওভারফ্লো আসলে সংজ্ঞায়িত আচরণ, তবে জাভা হিসাবে অন্যান্য ভাষায়, দুটির পরিপূরক গাণিতিক চারপাশে মোড়ানো হবে।


6

এটি একটি উপচে পড়া পূর্ণসংখ্যা মানগুলির জন্য একটি আন্ডারফ্লো ঘটে না।

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

যেহেতু শূন্যের নিকটতম পূর্ণসংখ্যার মানগুলি (1 এবং -1) এখনও কোনও পূর্ণসংখ্য ভেরিয়েবল দ্বারা প্রতিনিধিত্ব করতে পারে (একাধিক বিট সহ স্বাক্ষরিত পূর্ণসংখ্যাকে ধরে নিলে), একটি আন্ডারফ্লো ঘটতে পারে না।

Underflow উইকিপিডিয়ার নিবন্ধ একটি বেশ স্পষ্ট বিবরণ রয়েছে:

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


এটি উল্লেখ করা কার্যকর হতে পারে যে underflowপ্রায়শই নির্দিষ্ট অবস্থার উল্লেখ করতে নির্দিষ্টভাবে ব্যবহৃত হয় যেখানে কোনও সংখ্যার দৈর্ঘ্য ক্ষুদ্রতম অ-শূন্য মানের চেয়ে ছোট, তবে শূন্য-অমূল্যের মধ্যে সবচেয়ে ছোট সম্ভাব্য দূরত্বের চেয়ে বড় - অন্যথায় শব্দগুলি, উইকি প্রবন্ধটিকে "আন্ডারফ্লো গ্যাপ" বলে যার সংখ্যাগুলি পড়ে যায় সেই ক্ষেত্রে। আইইইই-74৪৪-অনুবর্তী বাস্তবায়নগুলিতে, ক্ষুদ্রতম উপস্থাপনযোগ্য সংখ্যা সংখ্যার মধ্যে ক্ষুদ্রতম প্রতিনিধিত্বযোগ্য পার্থক্যের সমান, সুতরাং এই ধরনের আন্ডারফ্লোগুলি ঘটতে পারে না, তবে পিসি বিশ্বের বাইরে, সমস্ত সিস্টেমই আইইইই-সম্মতিযুক্ত নয়।
সুপারক্যাট

2

পূর্ণসংখ্যার গণিতে, ওভারফ্লো খুব বড় এবং খুব ছোট উভয় মানকে বোঝায়। ভাসমান বিন্দুতে, ওভারফ্লোটি খুব বড় কোনও এক্সপোঞ্জ্যান্টকে বোঝায় এবং আন্ডারফ্লো খুব ছোট একটি এক্সপোঞ্জেন্টকে বোঝায়।

প্রকৃতপক্ষে, পূর্ণসংখ্যার ধরণের জন্য, সিপিইউগুলির ওভারফ্লো এবং ডুবো প্রবাহের মধ্যে পার্থক্য জানানোর উপায় নেই। নিম্নলিখিত 16-বিট যোগ করুন:

  0x8000 (unsigned 32768, or signed -32767)
+ 0xFFFF (unsigned 65535, or signed -1)
--------
  0x7FFF (32767, the carried '1' is lost)

সিপিইউতে ওভারফ্লো পতাকা অবশ্যই এই অ্যাডের পরে সেট হয়ে যাবে। স্বাক্ষরিত গণিত ব্যবহার করে ফলাফলটি খুব ছোট (-32768)। স্বাক্ষরবিহীন গণিত ব্যবহার করে ফলাফলটি খুব বড় (0x17FFF)। যেহেতু 2 এর পরিপূরক গণিত স্বাক্ষরিত এবং স্বাক্ষরবিহীন প্রকারের জন্য সমান, overflowতাই খুব বড় এবং খুব ছোট মান উভয়ই বোঝাতে বাধ্য হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.