اهمیت تئوری و ریاضیات در برنامه‌نویسی قسمت دوم: کری یا سرریز، کدام؟

0
737
کری یا سرریز
کری یا سرریز

مقدمه

در قسمت اول این مجموعه از مقالات، سیستم مکمل۲ را که همه‌ی ما از دوران دانشگاه از درس مدارمنطقی با آن آشنا هستیم، به‌خوبی واکاوی کردیم و از خاصیتی نهفته در دل این سیستم پرده برداشتیم و مفصلا توضیح‌دادیم که این خاصیت نهفته چه کاربردی می‌تواند داشته‌باشد. همچنین درنهایت یک مثال را در میکروکنترلر AVR که رجیسترهای این نوع از میکروکنترلرها ۸بیتی هستند، بررسی کردیم و ادعای خود مبنی‌بر همان خاصیت نهفته در دل سیستم متمم۲ را به اثبات رساندیم. در قسمت قبل یکی‌از دوستان با ادمین مرتبط شدند و اشاره کردند که اسم این خاصیت که سیستم متمم۲ را منحصربه‌فرد کرده است، wraparound نام دارد. بله این دوست عزیز درست فرمودند و اسم این خاصیت مهم wraparound نام دارد. اما ما چون می‌خواستیم همین موضوع را بیشتر توضیح‌داده و البته موضوعی دیگر را نیز بیان‌کنیم، صبر کردیم تا در این قسمت موضوعی دیگر را بیان‌کنیم و در قسمت بعد، از ترکیب این دو موضوع مثالی کاربردی‌تر و البته بسیار جذاب، برای شما ارائه بدهیم. این مقاله هم مانند مقاله قسمت قبل به نکته‌ای نهفته در درون اعداد اشاره می‌کند و یک اشتباهی که نه تنها دانشجویان، بلکه بسیاری‌از افراد با تجربه در حوزه الکترونیک نیز تکرار می‌کنند را یادآور می‌شود.

آیا بین کری(carry) و سرریز(overflow) تفاوتی وجود دارد؟

شاید بنابه یک دلیل بعضی افراد فکر کنند که بین این دو پارامتر هیچ تفاوتی وجود ندارد، اما این دلیل به کجا برمی‌گردد؟ اگر به‌خاطر داشته‌باشید اولین بار در درس مدارمنطقی سیستم اعداد بدون‌علامت به ما آموخته‌شده‌است، در این سیستم هیچ تفاوتی بین کَری و سرریز وجود نداشت و می‌گفتیم هرموقع کری داشته‌باشیم سرریز رخ‌داده‌است یا اینکه کری و سریز یکی هستند. بعداز آن، سیستم علامت و مقدار و بقیه‌ی سیستم‌های علامت‌دار به ما آموخته شد، مسئله همینجا پیش می‌آید، حال در سیستم اعداد علامت‌دار آیا کری و سرریز یکی هستند؟ خیر، در سیستم اعداد علامت‌دار کری و سرریز یکی نیستند و شاید دلیل این اشتباه که بعضی‌از افراد فکر می‌کنند در سیستم اعداد علامت‌دار این دو پارامتر یکی هستند این باشد که هنگامی‌که درس مدار منطقی را می‌گذراندند، وقتی از سیستم اعداد بدون علامت گذر کردند و به سیستم اعداد علامت‌دار رسیدند، به آن‌ها تعریف جدید گفته نشد و همان تعریف قبلی را به سیستم اعداد علامت‌دار نیز تعمیم دادند که خود اشتباه است و یا اگر گفته شد خیلی سطحی و سرسری بیان شد، چون اگر این موضوع به‌خوبی بیان می‌شد و گفته می‌شد که چه کاربردی دارد، تقریبا محال ممکن است که افراد به اشتباه فکر کنند در سیستم اعداد علامت‌دار هم کری وسرریز یکی هستند.

به‌طورکلی در سیستم اعداد علامت‌دار کری و سرریز باهم فرق دارند و صرفا وجود کری نمی‌تواند نشان‌دهنده‌ی این باشد که سرریز رخ داده است، همانطوری که نبودن کری نیز نمی‌تواند مشخص‌کند که سرریزی رخ نداده است، اما ممکن‌است که در حالت‌هایی هم این دو پارامتر یکی باشند. در ادامه به بررسی دقیق‌تر این موضوع خواهیم‌پرداخت.

رابطه بین کری و سرریز در سیستم اعداد متمم ۲

برای اینکه بتوانیم این موضوع را در سیستم اعداد علامت‌دار شرح بدهیم، سیستم متمم۲ که تا به امروز بهترین و بهینه‌ترین سیستم شناخته‌شده در نمایش اعداد در دیجیتال می‌باشد را انتخاب‌کردیم. در سیستم اعداد متمم۲، در رابطه با کری و سرریز، ۴حالت ممکن‌است به‌وجود بیاید که به تشریح هرکدام از این حالت‌ها به‌صورت دقیق خواهیم پرداخت. اما قبل‌از آن اجازه‌بدهید به تنها حالت ممکن که در سیستم اعداد بدون علامت وجود دارد بپردازیم.

کری و سرریز در اعداد بدون علامت

فرض‌کنید می‌خواهیم دو عدد بدون علامت ۳بیتی را باهم جمع‌کنیم، اعداد ۴+ و ۵+ را درنظر می‌گیریم. طبق تصویر زیر آن‌ها را با هم جمع می‌کنیم.

تفاوت بین کری و سرریز
تفاوت بین کری و سرریز

 

همانطورکه از تصویربالا مشخص‌است چون جمع نهایی در محدوده نبوده است، سرریز رخ‌داده است و بیت کری هم داریم.

به‌طورکلی در سیستم اعداد بدون علامت اگر قرار باشد سرریز رخ بدهد، همیشه وجود بیت کری نشان‌دهنده‌ی رخ‌دادن سرریز است و حالت‌دیگری وجود ندارد.

حال با این توضیحات سراغ مثال‌هایی در سیستم متمم۲ می‌رویم تا نشان‌دهیم که وجود یا عدم وجود کری به‌هیچ وجه نمی‌تواند نشان‌دهنده‌ی وجود سرریز باشد.

به این نکته توجه‌کنید وقتی می‌خواهید عددی را در سیستم متمم۲ نمایش دهید، باید حتما از قبل عرض بیت مشخص باشد چون در غیر اینصورت اشتباهاتی رخ خواهد داد.

در مثال‌های زیر ما عرض بیت را ۳بیت تعیین‌کردیم، یعنی محدوده اعدادی که با این تعداد بیت می‌توانیم نمایش بدهیم از ۴- تا ۳+ می‌باشد.

نه کری داریم و نه سرریز رخ داده است

تفاوت بین کری و سرریز
تفاوت بین کری و سرریز

 

خب در این حالت اتفاق خاصی نیفتاده است و دو عدد طبق روال معمول باهم جمع شده‌اند.

کری داریم ولی سرریز رخ نداده است

تفاوت بین کری و سرریز
تفاوت بین کری و سرریز

 

در تصویر بالا کری وجود دارد، اما همانطور که گفتیم صرفا وجود کری نمی‌تواند مشخص کند که سرریزی رخ داده است یا خیر.

کری نداریم اما سرریز رخ داده است

تفاوت بین کری و سرریز
تفاوت بین کری و سرریز

 

در تصویر بالا کری وجود ندارد، اما می‌دانیم که جمع این دو عدد در محدوده‌ی قابل نمایش توسط ۳بیت نمی‌گنجد و سرریز رخ داده است.

هم کری داریم و هم سرریز رخ داده است

تفاوت بین کری و سرریز
تفاوت بین کری و سرریز

 

در تصویر بالا کری وجود دارد، سرریز نیز رخ‌داده‌است، این حالت مشابه با اعداد بدون‌علامت می‌باشد که وجود کری مشخص‌کننده‌ی رخ‌دادن سر ریز است. اما درنظربگیرید که این حالت، فقط یک حالت از ۴حالت ممکن می‌باشد و صرفا وجود کری نمی‌تواند مشخص‌کند که سرریز رخ‌داده‌است یا خیر. پس تا اینجا متوجه‌شدید که جز درحالتی خاص کری و سرریز هیچ ارتباطی با همدیگر ندارند و دو چیز جدا ازهم هستند. اما بهتر است که دو تعریف کلی و مجزا برای این دو پارامتر ارائه بدهیم تا در فهمیدن و تشخیص این موارد دچار اشتباه و سردرگم نشویم.

اگر حاصل جمع دو عدد n بیتی را در n+۱ بیت ذخیره کنیم، آنگاه بیت n+۱ همان کری می‌باشد.

اگر حاصل جمع دو عدد n بیتی، در n بیت نگنجد یا قابل نمایش‌دادن نباشد، آنگاه سرریز رخ داده است.

اینکه چگونه کری و سرریز را تشخیص‌بدهیم و چه عملیاتی روی آن‌ها انجام بدهیم تا بتوانیم سرریز را کنترل‌کنیم، چه مواقعی نیاز به کنترل سرریز نمی‌باشد و اگر نیاز است که کنترل‌کنیم با چه روش‌هایی و چگونه می‌توانیم سر ریز را کنترل‌کنیم، روش‌های wrapping و saturation در کنترل سرریز چیست و کلی سوال دیگر ازجمله سوالاتی هستند که هم در قسمت سوم پاسخ داده خواهند شد و هم اینکه به‌صورتی عملی همراه با مثال روی میکروکنترلر یا fpga تست خواهند شد.

 

منبع: سیسوگ

مطلب قبلیساخت دماسنج با آردوینو
مطلب بعدیساخت سریع Image classifier با Tensorflow

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید