‌حسین زارع

دانش‌آموخته‌ی دکتری ریاضی کاربردی دانشگاه تربیت مدرس

‌حسین زارع

دانش‌آموخته‌ی دکتری ریاضی کاربردی دانشگاه تربیت مدرس

آخرین نظرات
  • ۶ آذر ۹۹، ۱۳:۰۰ - امیر حاتمی
    ممنون.

نمایش اعداد در استاندارد IEEE 754

پنجشنبه, ۲۲ مهر ۱۳۹۵، ۱۱:۴۳ ب.ظ

به لحاظ تاریخی، کامپیوترها‌ی گوناگون انتخاب‌های متفاوتی در تعیین مبنا، کران‎های نما و ارقام مانتیسِ نمایش ممیز شناور داشته‌اند. در سال 1985 با تلاش‌های گروهی متشکل از ریاضیدانان، دانشمندان علوم کامپیوتر و شرکت‎های تولید سخت‌افزار به سرپرستی ویلیام کاهان از دانشگاه کالیفرنیا، استانداردی برای نمایش اعداد ممیز شناور تحت عنوان IEEE 754 به سازندگان سخت‌افزارها عرضه شد. هم‌اکنون در بیشتر کامپیوترها از این استاندارد استفاده می‌شود. استاندارد IEEE، چند قالب کلی با دقت‌های مختلف از جمله دقت معمولی، دقت مضاعف و دقت‌های معمولی و مضاعف توسعه یافته برای نمایش اعداد ارائه می‌کند. در این‌جا به منظور آشنایی بیشتر با شیوه‌ی نمایش اعداد در این استاندارد، نحوه‌ی نمایش در دقت‌ معمولی و مضاعف را شرح می‌دهیم.

مبنای در نظر گرفته‌ شده در این استاندارد $\beta=2$ است. مطابق این استاندارد، در دقت معمولی از 32 بیت و در دقت مضاعف از 64 بیت برای نمایش یک عدد استفاده می‌شود. هر نمایش از سه بخش تشکیل می‌شود که عبارتند از علامت $(s)$، نمای تعدیل یافته $(c)$ و قسمت کسری مانتیس نرمال شده $(f)$.

این سه بخش با استفاده از روابط‌ زیر مشخص می‌شوند به‎صورت $(s|c|f)$ در کنار هم قرار می‌گیرند:

 دقت معمولی:$$x=\pm(1.f)_{2}\times2^{e}=(-1)^s(1.f)_2\times2^{c-127}$$

 دقت مضاعف:$$x=\pm(1.f)_{2}\times2^{e}=(-1)^s(1.f)_2\times2^{c-1023}$$

در دقت معمولی، از 32 بیت اختصاص داده شده برای نگهداری عدد، یک بیت برای علامت $(s)$ استفاده می‌شود به‌طوری که $s=0$ برای علامت مثبت و $s=1$ برای علامت منفی به‌کار می‌رود. از 31 بیت باقیمانده، 8 بیت آن برای نگهداری نمای تعدیل یافته $(c)$ و 23 بیت آن برای قسمت کسری مانتیس نرمال شده $(f)$ استفاده می‌شود. در دقت مضاعف، از 64 بیت اختصاص داده شده برای نگهداری عدد، یک بیت برای علامت $(s)$ و از 63 بیت باقیمانده، 11 بیت آن برای نگهداری نمای تعدیل یافته $(c)$ و 52 بیت آن برای قسمت کسری مانتیس نرمال شده $(f)$ استفاده می‌شود.
همان‌طور که ملاحظه می‌کنید شکل کلی قالب‌های ذکر شده در دقت‌های معمولی و مضاعف، کمی شبیه به نمایش ممیز شناور نرمال است. فقط باید توجه داشت که در استاندارد IEEE مانتیس $x$ به صورت $(1.f)_2$ نرمال و تنها قسمتی از مانتیس که با
$f$ نشان داده شده است، نمایش داده می‌شود. در واقع، چون اولین بیت مانتیس نرمال شده همواره برابر با 1 است نیازی به ذخیره‌سازی آن نیست. در عوض، این بیت برای نمایش نما مورد استفاده قرار می‌گیرد.

مثال: عدد $x=-45.75$ را در نظر بگیرید. می‌خواهیم این عدد را در استاندارد IEEE با دقت معمولی نمایش دهیم. برای این منظور، ابتدا نمایش دودویی آن را می‌یابیم. داریم $x=-(101101.11)$. حال باید این عدد را به فرم $(1.f)_2\times2^e$ درآوریم: $$x=-(1.0110111)×2^5$$اکنون از این تساوی باید مقادیر s ،f و c را بیابیم. با توجه به قالب کلی دقت ساده داریم:$$s=1,~~ f=0110111,~~e=5=c-127$$ در نتیجه $c=132=(10000100)_2$ و بنابراین:$$x=1|10000100|01101110000000000000000$$مثال: عدد زیر در استاندارد IEEE با دقت معمولی نمایش داده شده است.$$y=0|10000001|10011000000000000000000$$می‌خواهیم نمایش اعشاری آن را بیابیم. با توجه به نمایش فوق داریم:$$s=0,~~ c=(10000001)_2=129,~~ f=10011$$بنابراین $y$ عددی مثبت است و $e=c-127=129-127=2$. در نتیجه:$$y=+(1.f)_2×2^e=(1.10011)_2×2^2=(110.011)_2=6.375$$ فرمت جدید unum

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

John L. Gustafson

 فرمت unum (universal number) از روی استاندارد IEEE ساخته می‌شود. مطابق تعریف unum، هر نمایش از شش بخش بصورت زیر تشکیل می‌گردد: $$s|e|f|u|es-1|fs-1$$

در این قالب:

  • s علامت عدد است به‌طوری که $s=0$ برای علامت مثبت و $s=1$ برای علامت منفی به‌کار می‌رود.
  • e نمای عدد است.
  • f قسمت کسری عدد است.
  • u بیت عدم قطعیت (uncertainty bit) نام دارد و در صورتی که مقدار بخش کسری دقیق باشد، برابر با 0 وگرنه برابر با 1 است.
  • es سایز نما است. مثلا اگر برای ذخیره نما هشت بیت بکار رود es برابر 2(111) خواهد بود.
  • fs سایز کسر است. مثلا اگر برای ذخیره کسر بیست و سه بیت بکار رود fs برابر 2(10110) خواهد بود.

برای آشنایی بیشتر با این فرمت، گوستافسون کتابی تحت عنوان «پایان خطا» منتشر کرده است که در انتهای همین پست می‌توانید آن را دریافت کنید.

برای اینکه ببینید که فرمت unum تا چه اندازه می‌تواند در میزان حافظه صرفه جویی کند، نمایش ثابت آووگادرو ($\approx6.022 \times 10^{23}$) را در نظر بگیرید. نمایش این عدد در استاندارد IEEE با دقت مضاعف (64 بیتی) به‌صورت زیر است:

0 10001001101 1111111000010101010011110100010101111110101000010011
|      |                          |
|      |                       fraction (hidden bit not shown)
|   exponent
|
sign bit

این عدد در فرمت unum به صورت زیر نمایش داده می‌شود اما این بار با 29 بیت.

0   11001101   111111100001   1   111   1011
|       |           |         |    |      |
|       |           |         |    |     frac. size
|       |           |         |    |
|       |           |         |   exp. size
|       |           |         |
|       |           |       uncertainty bit
|       |           |
|       |        fraction (hidden bit not shown)
|       |
|   exponent
|
sign bit

کتاب پایان خطا، جان. ال. گوستافسون

موافقين ۰ مخالفين ۰ ۹۵/۰۷/۲۲
حسین زارع

نظرات (۵)

روش جالبی هست ولی درک کردن روابطی که داره خیلی سخته.

پاسخ:
ممکنه اولش اینطور به نظر بیاد اما واقعا چیز سختی نداره.
۲۶ آبان ۹۵ ، ۱۷:۲۷ رامین نصیری
مثل همیشه مطالب عالی.
پاسخ:
ممنون دوست خوبم.
سلام دوست عزیز. واقعا ازت ممنونم واسه این مقاله‌ای که گذاشتی. کارمو خیلی راه انداخت، دمت گرم.
پاسخ:
سلام. ممنون از اینکه نظر دادید.
سلام.
فقط بر خودم لازم و واجب دونستم که ازتون بابت این مقاله تشکر کنم.
خداقوت. دم شما گرم.
پاسخ:
سلام.
ممنون از لطف شما. خوشحالم که این مطالب براتون مفید واقع شده.

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

سپاسگزارم.

پاسخ:
سلام. ممنون که نظر دادید. موفق باشید.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی