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

اعداد ممیز شناور


اعداد ممیز شناور برای نمایش کمیت هایی استفاده می شوند که توسط اعداد صحیح قابل نمایش نیستند؛ چون یا آن ها دارای مقادیر کسری هستند یا این که خارج از محدوده قابل نمایش از نظر اندازه ی پهنای بیتی سیستم قرار دارند.

در عمل، همه کامپیوترهای مدرن از نمایش ممیز شناور که در استاندارد IEEE 754 مشخص شده برای تمامی اعدادی که با یک مانتیس و یک توان نمایش داده می شوند، بهره می‌برند. همانند نماد علمی، مقدار هر عدد ممیز شناور عبارتست از Mantissa * 2 ^ exponent.

این نحوه ی نمایش اجازه می دهد تا محدوده ی وسیعی از مقادیر با تعداد نسبتا کمی از بیت ها نمایش داده شوند که هم شامل مقادیر کوچک و هم مقادیری است که اندازه ی آن بسیار بزرگ تر از آن است که در عدد صحیحی با همان تعداد بیت نمایش داده شود. با این همه، مشکلی که به وجود می آید این است که تعداد زیادی از مقادیر در محدوده ی نمایش ممیز شناور نمی توانند به درستی نمایش داده شوند. درست مانند تعداد زیادی از اعداد حقیقی که نمی توانند توسط یک عدد دهدهی با تعدادی رقم ثابت معنی دار به نمایش در آیند. وقتی یک محاسبه مقداری را ایجاد می کند که نمی تواند دقیقا به وسیله قالب ممیز شناور نمایش داده شود، سخت افزار باید نتیجه را به مقداری که به درستی نمایش داده می شود، گرد کند. در استاندارد IEEE 754، روش پیش فرض برای این کار این است که به نزدیک ترین عدد گرد شود. در این روش، مقادیر به نزدیک ترین عدد قابل نمایش گرد می شوند و نتایجی که دقیقا در میان دو عدد قابل نمایش قرار دارند طوری انتخاب گرد می شوند که کم ارزش ترین رقم حاصل شان زوج شود. این استاندارد چندین شیوه گرد کردن دیگر را که قابل انتخاب توسط برنامه هستند، تعیین می کند که شامل گرد کردن به 0، گرد کردن به بی نهایت مثبت و گرد کردن به بی نهایت منفی است.

اعداد ممیز شناور

استاندارد IEEE 754، چند پهنای بیتی را برای اعداد ممیز شناور تعیین کرده است. دو پهنای که بیشتر از همه مورد استفاده قرار می گیرند، دقت ساده ( Single Precision ) و دقت مضاعف ( Double Precision ) هستند. اعداد با دقت ساده 32 بیت طول دارند و شامل 8 بیت برای نما، 23 بیت برای بخش کسر و 1 بیت علامت هستند که شامل علامت بخش کسری است. اعداد دقت مضاعف دارای 11 بیت برای نما، 52 بیت برای بخش کسر و 1 بیت برای علامت هستند.

هر دو فیلد نما و کسری در یک عدد ممیز شناور IEEE 754 به شکل متفاوتی نسبت به نمایش اعداد صحیح رمز گذاری می شوند. فیلد کسری، یک عدد مقدار-علامت است و بیان گر بخش کسری یک عدد دودویی است که فرض می شود بخش صحیح آن 1 می باشد. بر این اساس، مانتیس هر عدد ممیز شناور IEEE 754 مثبت یا منفی یک است. بخش کسری، به مقدار بیت علامت وابسته ایت. استفاده از فرض "1 مقدم" در این روش، تعداد ارقام معناداری را که می توانند به وسیله ی هر عدد اعشاری با پهنای مشخصی نمایش داده شوند، افزایش می دهد.

برای روشن تر شدن هر چه بیشتر این موضوع یک مثال را با هم میبینیم:

فیلد کسری در نمایش ممیز شناور با دقت ساده برای عدد 6.25 چیست؟

در ابتدا باید بدانید که اعداد کسری دودویی از همان نمایش ارزش مکانی اعداد ده دهی با مبنای 2 استفاده می کنند. بنابراین عدد دودویی 0b11.111 برابر است با 2^1 + 2^0 + 2^-1 + 2^-2 + 2^-3 = 3.875. با استفاده از این قالب هر کسر دهدهی مستقیما می تواند به یک کسر دودویی تبدیل شود، بنابراین عدد 6.25 برابر است با  2^2 + 2^1 +2^-1 = 0b110.01.

برای یافتن فیلد کسری، ما نمایش دودویی عدد را به سمت پایین شیفت می دهیم طوری که مقدار سمت چپ ممیز دودویی برابر 1 شود، پس 0b110.01 به مقدار 0b1.1001 * 2^2 تبدیل می شود. در نمایش کسری نرمال شده که در اعداد ممیز شناور استفاده می شود، فرض بر 1 مقدم است و فقط مقادیر سمت راست ممیز دودویی نمایش داده می شوند (در این حالت 1001). با گسترش مقدار به قالب کسری 32 بیتی ممیز شناور ساده، ما 0000 0000 0000 0000 0000 1001  را به عنوان فیلد کسری به دست می آوریم. توجه کنید که وقتی مقادیر کسری را به نمایش وسیع تر گسترش می دهیم، بر خلاف گسترش علامت در اعداد صحیح بدون علامت، صفرها را به سمت راست آخرین رقم اضافه می کنیم.

اعداد ممیز شناور

فیلد توان در هر عدد ممیز شناور از نمایش اعداد صحیح بایاس شده استفاده می کند که در آن بایاس ثابتی به هر مقدار اضافه می شود تا نمایش آن تعیین گردد. در اعداد ممیز شناور با دقت ساده، بایاس برابر 127 و برای اعداد با دقت مضاعف بایاس برابر 1023 است. بدین ترتیب مقدار فیلد نما می تواند با تفریق 127 از عدد دودویی بدون علامت موجود در فیلد نما به دست آید.

فاطمه مجدآبادی

بخش دانش و زندگی تبیان


برگرفته از:

Computer Architecture

Nicholas Carter

H.daneshvar