به طور کلی دو روش برای نمایش اعداد اعشاری در سیستمهای کامپیوتری وجود دارد:
- اعداد ممیز ثابت (Fixed point)
- اعداد ممیز شناور (Floating point)
در نمایش اعداد ممیز ثابت، نقطه ممیز در یک محل در عدد به صورت ثابت در نظر گرفته میشود و دیگر محل آن تغییر نخواهد کرد. به عبارت دیگر قبل از ساخت مدار منطقیآموزش مدار منطقی به زبان ساده - بررسی مدار منطقی و انواع آنامروزه درک صحیحی از مدارهای منطقی برای هر مهندس برق و کامپیوتر ضروری است. این مدارها عنصر اصلی کامپیوترها و بسیاری از وسایل الکترونیکی اطراف ما هستند، در این صفحه به بررسی و آموزش مدار منطقی پرداخته شده است مرتبط و هنگام طراحی، جای ممیز مشخص میشود و بعد از ساخت تغییر محل ممیز نیاز به تغییرات سخت افزاری دارد. توجه داشته باشید که نقطه ممیز در رجیستر ذخیره نمیشود و صرفاً تعبیری است که ما از عدد داریم و میدانیم که به صورت ضمنی در چه مکانی قرار دارد. به همین سبب اعداد ممیز ثابت به عنوان عدد صحیح در ساختمان دادهآموزش ساختمان داده و الگوریتمهر ساختمان داده یک نوع فرمت ذخیرهسازی و مدیریت دادهها در کامپیوتر است، که امکان دسترسی و اصلاح کارآمد آن دادهها را برای یکسری از الگوریتمها و کاربردها فراهم میکند، در این صفحه به بررسی و آموزش ساختمان داده و الگوریتم پرداخته شده است ها ذخیره میشوند و عملیات اعداد صحیح نیز روی آنها اعمال میشود (دقت کنید که ذخیره شدن به عنوان عدد صحیح به معنای عدد صحیح پنداشتن آن نیست). برای روشن شدن مطلب به مثال زیر توجه کنید:
مثال: رشته پنج بیتی 2(10100) را در مبنای 2 در نظر بگیرید. فرض کنید که نقطه ممیز را در سه حالت مختلف زیر در نظر گرفتهایم.
ممیز در سمت راستترین محل: در این حالت یک عدد 5 بیتی صحیح با مقدار 20 داریم : .10100
ممیز در سمت چپترین محل: در این حالت یک عدد کسری با مقدار 0.625 داریم : 10100.
ممیز در محلی بین دو حالت قبل: در این حالت یک عدد مرکب با مقدار 2.5 داریم : 10.100
همانطور که مشخص است از یک دنباله عددی ثابت بسته به جای نقطه ممیز سه مقدار عددی مختلف به دست میآید. بهطور کلی عدد ممیز ثابت N را به صورت زیر نشان میدهیم:
\[ \mathrm{N\ =}{\left(\underbrace{{\mathrm{a}}_{\mathrm{n}\mathrm{-}\mathrm{1}}{\mathrm{a}}_{\mathrm{n}\mathrm{-}\mathrm{2}}\dots {\mathrm{a}}_{\circ }}_{\mathrm{Integral\ Part}}.\underbrace{{\mathrm{a}}_{\mathrm{-}\mathrm{1}}{\mathrm{a}}_{\mathrm{-}\mathrm{2}}\dots {\mathrm{a}}_{\mathrm{-m}}}_{\mathrm{Fractional\ Part}}\right)}_{\mathrm{r}} \]
که در آن r مبنا یا ریشه (Radix) عدد را نمایش میدهد و یک عدد صحیح و مثبت بزرگتر از 1 است. به هر یک از ها یک رقم (Digit) گفته میشود. این عدد دارای یک بخش صحیح (Integral Part) با n رقم و یک بخش کسری (Fractional Part) با m رقم است. هر یک از رقمهای ai یک عدد طبیعی است که در رابطه \( \mathrm{\circ}\ \le\ \mathrm{a}_\mathrm{i}\le\mathrm{r}-\mathrm{1}\ \) صدق میکند. به عبارت دیگر در مبنای r، رقمهای مجاز برای نمایش عدد بین \( \mathrm{\circ} \) تا r-1 قرار دارند .
در سیستم نمایش سنتی اعداد، برای رقم موجود در موقعیت i وزن \(\mathrm{r}^\mathrm{i}\) در نظر گرفته میشود:
\[{\mathrm{r}}^{\mathrm{n}\mathrm{-}\mathrm{1}}\mathrm{\ }{\mathrm{r}}^{\mathrm{n}\mathrm{-}\mathrm{2}}\dots \ \ {\mathrm{r}}^{{}^\circ }\ \ \ \ \ \ {\mathrm{r}}^{-\mathrm{1}}\dots \ \ \ {\mathrm{r}}^{\mathrm{-m}}\]
\[{{(a}_{n-1}\ a_{n-2}\dots \ a_{\circ }\ \ .\ \mathrm{\ }a_{-1}\dots \ a_{-m})}_r\]
برای محاسبه مقدار عددی N از رابطه زیر استفاده میکنیم:
\[ {\mathrm{N}}_{\mathrm{V}}\mathrm{=}\left|\mathrm{N}\right|=\sum^{\mathrm{n}\mathrm{-}\mathrm{1}}_{\mathrm{i\ =\ }\mathrm{-}\mathrm{m}}{{\mathrm{a}}_{\mathrm{i}}{\mathrm{r}}^{\mathrm{i}}}\ \equiv \ \sum{(\text{رقم})\times {(\text{مبنا})}^{\text{اندیس}}} \]
مثال: مقدار عددی \( \mathrm{N\ =\ }\left(\mathrm{243.1}\right)_\mathrm{5}\ \) را به دست آورید.
\[ \mathrm{N}_\mathrm{V}=\mathrm{2\times}\mathrm{5}^\mathrm{2}+\mathrm{4\times}\mathrm{5}^\mathrm{1}+\mathrm{3\times}\mathrm{5}^\mathrm{\circ}+\mathrm{1\times}\mathrm{5}^{\mathrm{-1}}=\mathrm{73.2} \]
مثال: مقدار عددی \( \mathrm{N\ =\ }\left(\mathrm{1010001.01}\right)_\mathrm{2} \) را به دست آورید.
\[\mathrm{N}_\mathrm{V}=\mathrm{1\times}\mathrm{2}^\mathrm{6}+\mathrm{\circ\times}\mathrm{2}^\mathrm{5}+\mathrm{1\times}\mathrm{2}^\mathrm{4}+\mathrm{\circ\times}\mathrm{2}^\mathrm{3}+\mathrm{\circ\times}\mathrm{2}^\mathrm{2}+\mathrm{\circ\times}\mathrm{2}^\mathrm{1}+\mathrm{1\times}\mathrm{2}^\mathrm{\circ}+\mathrm{\circ\times}\mathrm{2}^{-\mathrm{1}}+\mathrm{1\times}\mathrm{2}^{-\mathrm{2}}=\ \mathrm{81.25}\]
در مبنای دو چون رقمها 0 یا 1 هستند، برای به دست آوردن مقدار عددی کافی است که تنها وزن رقمهای 1 را با هم جمع کنیم.
مثال: مقدار عددی \(\mathrm{N\ =\ }\left(\mathrm{11100}\right)_\mathrm{2}\) را به دست آورید.
در این مثال رقمهای 1 در محلهایی به وزن 4، 8 و 16 قرار دارد، بنابراین داریم:
\[\mathrm{N}_\mathrm{V}\mathrm{\ =\ 16+8+4\ =\ 28}\]
هر عدد ممیز ثابت در معماری کامپیوتر آموزش جامع معماری کامپیوتر در مهندسی کامپیوتر، معماری کامپیوتر مجموعهای از قوانین و روشهایی است که به چگونگی طراحی، کارکرد، سازماندهی و پیاده سازی (ساخت) سیستمهای کامپیوتری میپردازد، در این صفحه به بررسی و آموزش کامل معماری کامپیوتر پرداخته شده است دارای 3 پارامتر است که آن را توصیف میکند:
- علامتدار (Signed) یا بیعلامت (Unsigned) بودن عدد
- موقعیت نقطه ممیز نسبت به سمت راست بیت علامت (در اعداد علامتدار) یا موقعیت نقطه ممیز نسبت به MSB (پرارزشترین بیت در اعداد بدون علامت)
- تعداد بیتهای کسری (Fractional) ذخیره شده
اعداد ممیز ثابت بدون علامت به صورت \(U(i,f)\) نمایش داده میشود که در آن i مکان نقطه ممیز نسبت به سمت چپ MSB را نشان میدهد و f نشان دهندهی تعداد بیتهای ذخیره شده در قسمت کسری عدد است. به عنوان مثال \(U(i,f)\) به این معنی است تعداد 6 بیت در قسمت کسری عدد وجود دارد و همچنین تعداد بیتهای بعد از نقطه ممیز از سمت راست (فاصله نسبت به سمت چپ MSB) برابر 10 بیت است.
در شکل بالا i نشان دهنده قسمت صحیح و f نشان دهندهی قسمت کسری این رشته بیت است. اعداد کوچکتر از 1 قسمت صحیح را ندارند در نتیجه در هنگام نمایش، مولفهی i آنها منفی خواهد بود. به عنوان مثال \(U(-8,16)\) عددی بدون علامت بدون قسمت صحیح است که 8 بیت ابتدایی آن 0 بوده و ذخیره نمیشوند و دارای قسمت کسری با دقت 16 بیت است.
به همین صورت برای نمایش اعداد ممیز ثابت علامتدار از عبارت \(S(i,f)\) استفاده میشود که i نشان دهنده مکان نقطه ممیز در سمت چپ بیت علامت (Sign bit) و f نشان دهندهی تعداد بیتهای ذخیره شده برای قسمت کسری است. لازم به ذکر است که بر اساس سیستم مکمل 2 میدانیم که بیت علامت در جایگاه سمت چپترین بیت ذخیره میشود. برای مثال \(S(9,6)\) تعداد 6 بیت برای قسمت کسری عدد و 10 بیت در سمت چپ نقطه ممیز را نشان میدهد که از این 10 بیت، 1 بیت آن بیت علامت است و 9 بیت دیگر نماینده قسمت صحیح عدد هستند.
در شکل بالا i نشان دهنده قسمت صحیح و f نشان دهندهی قسمت کسری این رشته بیت است. اعداد کوچکتر از 1 قسمت صحیح را ندارند در نتیجه در هنگام نمایش، مولفهی i آنها منفی خواهد بود. به عنوان مثال \(S(-7,16)\) دارای 7 بیت علامت (s) که 6 تای اول از سمت چپ نقطه ممیز آن ذخیره نمیشوند و بیت علامت به عنوان 15 امین بیت قسمت کسری مطابق شکل زیر ذخیره میشود.
توجه داشته باشید که بیتهای پنهان (بیتهای ذخیره نشده) در نمایشهای بالا در یک عدد علامتدار، کپیهایی از بیت علامت فرض میشوند (Sign extend) در حالی که بیتهای پنهان در یک عدد بدون علامت صفر فرض میشوند.
مثال: شکل زیر یک ممیز ثابت بدون علامت را نشان میدهد که 7 بیت در قسمت صحیح و 9 بیت در قسمت کسری خود دارد. این عدد .\(U(7,9)\) است. توجه داشته باشید که تعداد کل بیتها 7 + 9 = 16 است.
مقدار این عدد در مبنای 10 با محاسبه حاصل جمع ارزش هر جایگاه غیر صفرش (یک) به صورت زیر بدست میآید :
\[2^{13\ -\ 9}\ +\ 2^{11\ -\ 9}\ +\ 2^{10\ -\ 9}\ +\ 2^{9\ -\ 9}\ +\ 2^{5\ -\ 9}\ +\ 2^{3\ -\ 9}\ +\ 2^{1\ -\ 9}\ +\ 2^{0\ -\ 9}\ =\ 2^4\ +\ 2^2\ +\ 2^1\ +\ 2^0\ +\ 2^{-4}\ +\ 2^{-6}\ +\ 2^{-8}\ +\ 2^{-9}\ =\ 16\ +\ 4\ +\ 2\ +\ 1\ +\ \frac{1}{16}\ +\ \frac{1}{64}\ +\ \frac{1}{256}\ +\ \frac{1}{512}\ =\ {23.083984375}_{10}\]
مثال: شکل زیر یک ممیز ثابت علامتدار را نشان میدهد که 9 بیت در قسمت صحیح و 6 بیت در قسمت کسری خود دارد. این عدد \(S(9,6)\) است. توجه داشته باشید که تعداد کل بیتها 6 + 9 + 1 = 16 است.
مقدار این عدد در مبنای 10 با محاسبه حاصل جمع ارزش هر جایگاه غیر صفرش (یک) به صورت زیر بدست میآید :
\[2^{13\ -\ 6}\ +\ 2^{11\ -\ 6}\ +\ 2^{10\ -\ 6}\ +\ 2^{9\ -\ 6}\ +\ 2^{5\ -\ 6}\ +\ 2^{3\ -\ 6}\ +\ 2^{1\ -\ 6}\ +\ 2^{0\ -\ 6}\ =\ 2^7\ +\ 2^5\ +\ 2^4\ +\ 2^3\ +\ 2^{-1}\ +\ 2^{-3}\ +\ 2^{-5}\ +\ 2^{-6}\ =\ 128\ +\ 32\ +\ 16\ +\ 8\ +\ \frac{1}{2}\ +\ \frac{1}{8}\ +\ \frac{1}{32}\ +\ \frac{1}{64}\ =\ {184.671875}_{10}\]
توجه داشته باشید که در دو مثال بالا، الگوی بیتها یکسان بود. ارزش یک عدد به نحوه تفسیر آن بستگی دارد در نتیجه نمادی که معرفی کردیم به ما این امکان را میدهد که به راحتی مشخص کنیم که یک عدد چگونه تفسیر شود. برای مقادیر علامتدار اگر بیت اول غیر صفر باشد، قبل از ارزیابی عدد، ابتدا باید مکمل 2 آن را محاسبه کنیم و سپس بعد از محاسبه عدد، یک علامت منفی در پشت حاصل قرار دهیم.
مثال: شکل زیر یک ممیز ثابت علامتدار را نشان میدهد که 8 بیت در قسمت صحیح و 7 بیت در قسمت کسری خود دارد. این عدد \(S(8,7\) است. توجه داشته باشید که تعداد کل بیتها 7 + 8 + 1 = 16 است.
برای محاسبه عبارت بالا در ابتدا مبیایست عدد داده شده را مکمل 2 کرده و سپس در آخر یک منفی به پشت آن اضافه کنیم.
\[{\mathrm{1011010101111010}}_{two}{{\stackrel{\text{مکمل}\mathrm{\ 2}}{\Longrightarrow}}}\ {\mathrm{0100101010000110}}_{two}\]
در نتیجه مقدار عدد برابر است با:
\[-\left(2^{14\ -\ 7}\ +\ 2^{11\ -\ 7}\ +\ 2^{9\ -\ 7}\ +\ 2^{7\ -\ 7}\ +\ 2^{2\ -\ 7}\ +\ 2^{1\ -\ 7}\right)\ =\ -\left(2^7+\ 2^4\ +\ 2^2\ +\ 2^0\ +\ 2^{-5}\ +\ 2^{-6}\right)\ =-\left(\ 128\ +\ 16\ +\ 4\ +\ 1+\ \frac{1}{32}\ +\ \frac{1}{64}\right)\ =\ {-149.046875}_{10}\]
مثال: به عنوان آخرین مثال این بخش، بر اساس الگوی زیر مقدار عبارت \(S(-5,16)\) را محاسبه میکنیم.
مشابهاً برای محاسبه عبارت بالا در ابتدا مبیایست عدد داده شده را مکمل 2 کرده و سپس در آخر یک منفی به پشت آن اضافه کنیم.
\[-\left(2^{-6}\ +\ 2^{-9}\ +\ 2^{-11}\ +\ 2^{-13}\ +\ 2^{-18}\ +\ 2^{-19}\right)\ =-{0.0181941986083984375}_{10}\]
محدوده نمایش اعداد ممیز ثابت
محدوده نمایش اعداد ممیز ثابت با n رقم صحیح و m رقم کسری به صورت زیر تعریف میشود:
\[\mathrm{\circ\ \le\ N\ \le}\mathrm{r}^\mathrm{n}-\mathrm{r}^{\mathrm{-m}}\]
کوچکترین عدد قابل نمایش زمانی به دست میآید که تک تک رقمها برابر\( \mathrm{\circ} \) باشند.
بزرگترین عدد قابل نمایش وقتی است که همه رقمها 1- r باشند :
\[ \underbrace{\left(r-1\right)\left(r-1\right)\dots \left(r-1\right)}_{\text{قسمت}\mathrm{\ }\text{صحیح}}.\underbrace{\left(r-1\right)\dots \left(r-1\right)}_{\text{قسمت}\mathrm{\ }\text{کسری}} \]
مقدار عددی این عبارت از رابطه زیر به دست میآید:
\[ \begin{array}{c} \ 1\overbrace{000...00}^{\mathrm{n}}.\overbrace{00...00}^{\mathrm{m}}\ \equiv \ {\mathrm{r}}^{\mathrm{n}}\ \\ -\ \underline{\mathrm{\ \ \ \ \ }\mathrm{\ }\mathrm{\ \ }\mathrm{\ \ \ \ }\mathrm{\ \ }\mathrm{\ \ \ }\mathrm{\ }0.00\mathrm{\dots }\mathrm{01}}\ \equiv -\ {\mathrm{r}}^{\mathrm{-m}}\ \end{array} \]
\[ \mathrm{r}^\mathrm{n}-\mathrm{r}^{\mathrm{-m}} \]
برای انجام این تفریق دقیقاً مانند تفریق عادی در مبنای 10 عمل میکنیم، یعنی در صورت نیاز به رقم قرضی از رقم قبلی غیر صفر یک واحد قرض کرده و به رقم بعدی r واحد اضافه میکنیم :
\[ \require{enclose} \begin{matrix} & & {r-1} & {r-1} & & {r-1} & & {r-1} & {r-1} & & {r-1} \\ & 0 & \enclose{horizontalstrike}{r} & \enclose{horizontalstrike}{r} & &\enclose{horizontalstrike}{r} & & \enclose{horizontalstrike}{r} & \enclose{horizontalstrike}{r} & & \enclose{horizontalstrike}{r} & r \\ - & \enclose{horizontalstrike}{1} & 0 & 0 & ... & 0 & . & 0 & 0 & ... & 0 & 0 \\ & & & & & 0 & . & 0 & 0 & ... & 0 & 1 \\ \hline & & r-1 & r-1 & ... & r-1 & .& r-1 & r-1 & ...& r-1 & r-1 \\ \end{matrix} \]
عدد \( \mathrm{r}^\mathrm{n} \) به صورت یک رقم 1 با n عدد "∘" در جلوی آن نمایش داده میشود.
عدد \( \mathrm{r}^\mathrm{n}-\mathrm{r}^{\mathrm{-m}} \) به صورت یک عدد مرکب با n رقم صحیح 1- r و m رقم کسری 1- r نمایش داده میشود. برای حالت خاص \( \mathrm{m\ =\ \circ} \) (عدد کاملاً صحیح)، به صورت n رقم صحیح 1- r نمایش داده میشود.
تعداد اعداد قابل نمایش در ممیز ثابت
تعداد اعداد ممیز ثابت قابل نمایش با n رقم صحیح و m رقم کسری برابر \( \mathrm{r}^{\mathrm{n+m}} \) است. زیرا برای هر یک از m + n جایگاهِ ارقامِ عدد مورد نظر، r حالت (از 0 تا r - 1) وجود دارد در نتیجه مطابق اصل ضرب در کل ما به تعداد \( \mathrm{r}^{\mathrm{n+m}} \) عدد متفاوت برای نمایش داریم.
با n رقم صحیح محدوده نمایش برای یک عدد n رقمی بدون علامت در مبنای r برابر \( \mathrm{\circ} \le N\ \le\ \mathrm{r}^\mathrm{n}-\mathrm{1} \) و تعداد اعداد قابل نمایش برابر \( \mathrm{r}^\mathrm{n} \) است.
جمعبندی
تمامی سیستمهای کامپیوتری به منظور پردازش دادهها طراحی میشوند. دادهها را میتوان بهطور کلی به دو دسته دادههای عددی (مانند اعداد ممیز ثابت) و دادههای غیرعددی (مانند کرکتر ʼAʻ) تقسیم کرد. از آنجا که در درس معماری کامپیوتر، هدف یادگیری طراحی سیستمهای کامپیوتری برای پردازش دادههای عددی است، در این بخش مروری بر روشهای مختلف نمایش دادههای ممیز ثابت داشتیم تا ذهن شما را به منظور درک بهتر انجام محسابات در سیستمهای کامپیوتری، آماده کنیم.
منابع
- https://en.wikipedia.org/wiki/Fixed-point_arithmetic
- https://www.konkurcomputer.ir/%D8%AA%D8%B3%D8%AA-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1.html
- https://www.sciencedirect.com/topics/computer-science/fixed-point-number