مقدمه
در این آموزش از پایگاه دانش هگزالینکس قصد داریم نحوه نمایش اعداد اعشاری ممیز ثابت علامت دار و بدون علامت را به شما آموزش دهیم و همچنین قوانین و چهارچوب های لازم برای کار کردن با این اعداد در محاسبات و عملیات منطقی را بیان نماییم. در اولین بخش از این سری آموزشی، مجبوریم روابط و تعاریف ریاضی را با هم مرور کنیم. از این رو ممکن است بخش اول از جذابیت کافی برخوردار نباشد، اما به شما اطمینان میدهیم با مثالهای بسیار خوب هیچ ابهامی در ذهن شما باقی نگذاریم. پیشنهاد میکنیم پیش از شروع به خواندن از دو چیز اطمینان حاصل کنید. اول اینکه با شیوه نمایش اعداد علامت دار در FPGA به شکل کامل آشنایی دارید و دوم اینکه به اندازه کافی وقت برای مطالعه و مکث روی مفاهیم ارائه شده دارید.
نمایش اعداد دودویی ممیز ثابت
با یک مجموعه N تایی از اعداد دودویی (عدد ‘0’ یا ‘1’)، قادر خواهیم بود 2N حالت مختلف را تولید کنیم. چون برای گزینه اول ۲ حالت داریم و برای گزینه بعدی نیز ۲ حالت و به همین ترتیب تا انتها، پس داریم:
$$2\times2\times2\times \: … \:\times2 = 2^N$$
در حالت کلی این 2N حالت میتوانند هر چیزی تصور بشود.
- دانشجویان یک دانشگاه
- گونههای گیاهی یا جانوری
- اعداد صحیح
- سطوح ولتاژ
- و …
هر یک از گزینههای فوق میتوانند به عنوان نمایشی از نگاشت حالتهای دودویی به المانهای یک زیر مجموعه نشان داده شوند.
نکته اساسی این است که یک کلمه دودویی به طور ذاتی هیچ معنی و مفهومی ندارد. اما بیشتر افراد تمایل دارند که آن را (حداقل در نگاه اول) به عنوان اعداد صحیح مثبت یا اعداد طبیعی در نظر بگیرند. اما در واقع معنی و مفهوم یک عدد دودویی N بیتی کاملاً به تفسیری که میشود، بستگی دارد. حال با این نگاه و اینکه هر مجموعهای را میتوان با عدد N بیتی نمایش داد، ما قصد داریم یک زیر مجموعه از اعداد گویا را نمایش دهیم. یادآوری میکنیم که اعداد گویا مجموعهای از اعداد هستند که بصورت کسری (a/b) نشان داده میشوند. به طور کلی a و b به صورت زیر تعریف میشوند:
$$b \neq 0 \:\:and \:\:a,b \in Z$$
زیر مجموعهای که ما به دنبال آن هستیم، زیر مجموعهای است که در آن عدد b توانی از ۲ است. یعنی b = 2n باشد.
علاوه بر این، محدودیتهای دیگری نیز در نمایش این زیر مجموعه مورد نظرمان در نظر میگیریم. اول اینکه هر کدام از اعضای این زیر مجموعه باید تعداد بیتهای دودویی یکسانی داشته باشند. دوم اینکه نقطه اعشار آنها در موقعیت ثابتی قرار داشته باشد، یعنی نقطه ممیز در یک مکان ثابت باشد. دقیقاً به همین دلیل، به این نمایش از اعداد، اصطلاحاً ممیز ثابت گفته میشود. در ادامه چهار حالت برای نمایش دودویی اعداد به شما معرفی میکنیم:
- اعداد صحیح بدون علامت
- اعداد اعشاری بدون علامت
- اعداد صحیح علامت دار مکمل دو
- اعداد اعشاری علامت دار مکمل دو
در این مقاله نمایش اعداد صحیح به صورت یک حالت خاص از نمایش اعداد اعشاری بیان میشود. پس کارمان را ابتدا با معرفی شیوه نمایش اعداد بدون علامت که ساده تر هستند، شروع میکنیم. این نمایش به چیزی جز محاسبات جبری پایه نیاز ندارد.
اعداد اعشاری ممیز ثابت بدون علامت
یک کلمه N بیتی دودویی هنگامی که به عنوان یک عدد اعشاری ممیز ثابت بدون علامت تفسیر شود، میتواند مقادیر زیر مجموعه p از اعداد غیر منفی اعشاری را شامل شود. این زیر مجموعه به صورت زیر تعریف میشود.
$$P=\lbrace \frac{p}{2^b}\:|\: 0 \leq p \leq {2^N}-1 , p \in Z\rbrace$$
در نظر داشته باشیم که P شامل 2N عضو است، این نوع از اعداد اعشاری را بطور مختصر بصورت (a,b)U نمایش میدهند که در آن a=N-b است. در یک عدد (a,b)U، بیت n-ام از راست که میتواند اندیسی بین 0 تا N-1 داشته باشد، ارزش یا وزن این بیت معادل 2n-b است. حال اگر n=b باشد، آنگاه وزن بیت برابر با ۱ خواهد بود. یعنی همانند اعداد دهدهی نقطه اعشار دقیقاً بین این بیت و بیت سمت راست آن خواهد بود. در یک عدد (a,b)U، ما یک عدد N بیتی دارم که دارای a بیت صحیح و b بیت اعشاری است.
نمایش اعداد اعشاری ممیز ثابت
در حالت کلی شیوههای نمایشی متفاوتی برای نشان دادن فرمتهای ممیز ثابت در کتابها و مقالات مختلف به کار گرفته میشود. به عنوان مثال برای یک عدد ۱۶ بیتی بدون علامت و یا علامت دار با ۱۴ بیت صحیح و ۲ بیت اعشار ممکن است یکی از نمایشهای زیر انتخاب شود. به شما به عنوان یک طراح سیستمهای دیجیتال پیشنهاد میکنم همه این نمایشها را به خاطر بسپارید، چون به آنها نیاز دارید.
اما هر کدام که برای شما راحتتر است در طراحیهای خودتان بکار ببرید.
نمایش علامت دار | نمایش بدون علامت |
Q1402 | U1402 |
Q1614 | U1614 |
Q1602 | U1602 |
(13,2)Q | (14,2)U |
(15,14)Q | (16,14)U |
(15,2)Q | (16,2)U |
14,2 | 14,2 |
مقدار یک عدد فرضی N بیتی x در فرمت (a,b)U به صورت زیر تعیین میشود:
$$x= (\frac{1}{2^b}) \:\sum_{n=0}^{N-1}\: {2^n}x_n$$
که xn بیت n ام عدد x است. در واقع رِنج یا دامنه تغییرات عددی با فرمت (a,b)U از 0 تا 2a-2-b خواهد بود.
$$2^a-2^{-b}=\frac{2^{N}-1}{2^b}$$
به عنوان مثال یک عدد ۸ بیتی با فرمت (6,2)U به شکل زیر نشان داده میشود:
$$b_5 \:\: b_4 \:\: b_3 \:\: b_2 \:\: b_1 \:\: b_0 \:\: b_{-1} \:\: b_{-2}$$
از آنجایی که b=2 است، نقطه اعشار در سمت چپ بیت دوم از راست قرار میگیرد و عدد ما دارای ۶ بیت صحیح و ۲ بیت اعشاری هست. رِنج اعداد در این فرمت نیز از 0 تا 63.75 است.
$$2^6-2^{-2}=64-\frac{1}{4}=63.75$$
نمایش اعداد صحیح بدون علامت میتوانند به صورت خاصی از نمایش اعداد اعشاری ممیز ثابت نشان داده شود که در آن b=0 است. یعنی به طور خاص یک عدد صحیح بدون علامت N بیتی به صورت نمایش (N,0)U از یک عدد اعشاری ممیز ثابت بیان شود و همچنین رِنج اعدادی که در این فرمت قرار میگیرد به صورت زیر است.
$$0 \: \leq \: U(N,0) \: \leq \: 2^N-1 \: \sim(2^N-2^0)$$
اعداد صحیح بدون علامت را اعداد دودویی طبیعی نیز مینامند. در ادامه چند مثال برای درک بهتر مطالب فوق خدمتتان بیان میکنیم:
۱- عددی با فرمت (6,2)U را در نظر بگیرید. بدیهی است این عدد ۸ بیت دارد و رِنج آن از 0 تا 63.75 است. با توجه به این توضیحات، عدد هگزادسیمال (8A)h یا دودویی (10001010)b معادل چه عددی در مبنای دسیمال میشود؟
$$x=(\frac{1}{2^2})(2^7+2^3+2^1)=34.5$$
۲- عددی با فرمت (2,18-)U که عددی ۱۶ بیتی است را در نظر بگیرید. دامنه تغییرات آن از 0 تا 0.004623413085938 است. بنابراین مقدار هگزادسیمال (04BC)h یا دودویی (0000010010111100)b برابر است با:
$$x=(\frac{1}{2^{18}})(2^{10}+2^7+2^5+2^4+2^3+2^2)=\frac{1212}{2^{18}}$$
$$x=0.004623413085938$$
۳- همان عدد مثال ۲ در فرمت (16,0)U برابر است با:
$$x=(\frac{1}{2^{0}})(2^{10}+2^7+2^5+2^4+2^3+2^2)=\frac{1212}{2^{0}}=1212$$
اعداد اعشاری ممیز ثابت علامت دار
در این بخش فرض بر این است که مخاطب با نمایش اعداد علامت دار به صورت مکمل یک و مکمل دو آشناست. به طور کلی مکمل یک از معکوس کردن هریک از بیت های عدد دودویی اصل بدست می آید و مکمل دو حاصل مکمل یک عدد بعلاوه ۱ است. جهت مطالعه بیشتر میتوانید به اینجا مراجعه کنید.
یک کلمه N بیتی هنگامی که به صورت یک عدد اعشاری ممیز ثابت مکمل دو علامت دار تفسیر شود، میتواند مقادیر زیر مجموعه P که به صورت زیر تعریف میشود را شامل شود:
$$P=\lbrace \frac{p}{2^b}\:|\: {-2^{N-1}} \leq p \leq {2^{N-1}}-1 , p \in Z\rbrace$$
در اینجا نیز P شامل 2N عضو است و به اختصار آن را به صورت (a,b)Q نشان میدهند، که در آن a=N-b-1 است. مقدار عدد N بیتی x در فرمت (a,b)Q با فرمول زیر محاسبه میشود:
$$x=(\frac{1}{2^b})(-2^{N-1}x_{N-1}+ \:\sum_{n=0}^{N-2}\: {2^n}x_n)$$
که xn مقدار بیت n-ام از عدد x است. دامنه تغییرات عدد x با فرمت (a,b)Q برابر است با
$$-2^{N-1-b} \leq \: x \: \leq 2^{N-1-b}-2^{-b}$$
توجه داشته باشید که مولفه بالای علامت ∑ یک عدد از فرمول بیان شده در محاسبه مقدار عدد بدون علامت کمتر است و همچنین این جمعها روی N-1 بیت کم ارزش انجام میشود. این به علت آن است که بیت با ارزش در نمایش اعداد علامت دار مکمل دو به عنوان بیت علامت است. اگر عددی با فرمت (13,2)Q باشد، تعداد بیتهای این عدد برابر با 13+2+1=16 خواهد بود و دامنه اعدادی که در این فرمت قرار میگیرد از 8192-=213- تا 8191.75-=213-2-2 است.
جمع بندی
در بخش اول این سری آموزشی، به شما شیوه نمایش اعداد اعشاری ممیز ثابت علامت دار و بدون علامت را آموزش دادیم. شاید تعداد فرمولها و روابط کمی ریاضی زیاد بود و باعث شد، کمی خسته شوید. اگر مفاهیم کلی را یاد گرفتید، نیازی ندارید فرمولها را به خاطر بسپارید، فقط کمی تمرین کنید. هر سوأل یا ابهامی در رابطه با موضوعات مطرح شده دارید، حتماً با ما در میان بگذارید.
در بخش بعدی این آموزش شما را با مفاهیم مهمی همچون دقت محاسبات، یا میزان تفکیک پذیری آشنا خواهیم کرد.
6 در مورد “اعداد اعشاری ممیز ثابت (بخش اول: مفاهیم کلی)”
خداقوت.
چقدر خوبه که هنوز آدم های خوب تو دنیا وجود دارن.
درود بر شما سرکار خانم زهرا
فیدبکهای پر انرژی شما باعث مباهات و افتخار ماست. امیدوارم با دلگرمیهای عزیزانی چون شما همچنان پر قدرت در این راه قدم برداریم.
پیروز، شاد و تندرست باشید.
سلام و عرض احترام خدمت شما.
بسیار متشکرم از مطالب مفید شما.
راستش من یکم گیج شدم… در مثال دوم اعداد بدون علامت، اونجا که نوشتین (2,18-)U منظورتون رو از عدد 18 و2- میفرمایید لطفا؟
سلام بر شما دوست عزیز،
همانطور که در متن هم اشاره شده، به دلیل استفاده از حرف U این عدد معرف یک عدد ممیز ثابت بدون علامت است. با توجه به اینکه مقدار 18+2- برابر با 16 میشود. این عدد ۱۶ بیت دارد. که دو بیت با ارزش آن در این نمایش نشان داده نشده است. برای درک بهتر به این مثالها توجه کنید. (نقطه نشان داده شده فرضی است و در عمل وجود ندارد.)
همان عدد (0000010010111100)b در نمایش (2,18-)U
همان عدد (00000010010111100)b در نمایش (1,18-)U
همان عدد (000000010010111100.)b در نمایش (0,18)U
همان عدد (0.000000010010111100)b در نمایش (1,18)U
همان عدد (00.000000010010111100)b در نمایش (2,18)U
و الی آخر …
در واقع عدد 2- به ما میگه، دو بیت را با علم به اینکه هر دو بیت صفر هستند و در با ارزشترین جایگاه قرار دارند در عبارت باینری نشان نمیدهیم. در اینجا به جای ۱۸ بیت از ۱۶ بیت برای نمایش عدد استفاده میکنیم. اما در واقعیت ۱۸ بیت برای بخش اعشاری داریم.
سلام و ممنون از سایت بسیار خوبتون!
من از تک تک آموزشهاتون دارم لذت میبرم و به نوبت همه رو دارم مطالعه میکنم و آرزوی موفقیت برایتون دارم.
تنها نکتهای که به نظرم توی این آموزش اومد این بود که برای بخش اعداد اعشاری ممیز ثابت علامتدار اگر مثالی وجود داشت بسیار بهتر بود و در نهایت هم خط انتهایی بخش مذکور (خط انتهایی قبل از جمعبندی) دامنهی عددی رو با یک علامت منفی بیشتر نوشتید که لطفا اصلاح بفرمایید
پاینده باشید
سلام بر شما دوست عزیز و گرامی
از اظهار لطفی که نسبت به مطالب منتشر شده داشتید، سپاسگزام و از اینکه زمان گران بهای خودتون رو گذاشتید تا دیدگاه ارزشمندتون رو به اشتراک بگذارید، بسیار متشکریم.
نکتهای که فرمودید کاملاً صحیح است. دقت شما در مطالعه این مطلب و خطایی که به آن اشاره کردید بیانگر توانایی شما در درک مطالب و روحیه مشارکت پذیری اجتماعی شماست.
این خطا اصلاح شد.
امیدوارم پیروز و پاینده باشید.