خطاها و حساب ممیز سیار

در این بخش با بحث اعداد ماشینی و استاندارد IEEE 754،  خطاها، رشد خطاها، خطای خنثی سازی و... آشنا می شویم.

 

در محاسبات علمی اعداد به صورت ممیز سیار(نمایش علمی) نمایش داده می شوند و محاسبات در همین چارچوب انجام می گیرد.

در سالهای پیشین استانداردهای مختلفی برای ذخیره سازی وجود داشته است. اما در سال 1985 حاصل تلاشهای 10 ساله گروهی از ریاضیدانان، علوم کامپیوتری ها، مهندسان، سازندگان کامپیوتر و شرکتهای میکروپروسسور به بار نشست و استاندارد IEEE 54 در دو قالب دقت ساده یا 32 بیتی و دقت مضاعف یا 64 بیتی به کاربران عرضه شد.

 

در این استاندارد عدد به فرم زیر ذخیره می شود:

 IEEE 754 - 32 bit:  x = (-1)s2e-127(1+f)

 IEEE 754 - 64 bit:  x = (-1)s2e-1023(1+f)

    

 

 تبدیل به فرم IEEE 754

 

مثال. عدد 0.085 را به فرمت دقت ساده تبدیل کنید.

ابتدا به علامت عدد 0.085 توجه کنید که مثبت است بنابراین s=0. یعنی بیت علامت 0 است.

(-1)0  = 1

عدد 0.085 را در به فرم نمایش علمی در مبنای 2 بنویسید. این بدان معناست که باید عدد را به عددی بین 1 و 2 و توان 2 تبدیل کنیم. یعنی
                                          

0.085=(-1)s 2e-127 (1+f)  

 با توجه به

 

0.085 / 2-1 = 0.17
0.085 / 2-2 = 0.34
0.085 / 2-3 = 0.68
0.085 / 2-4 = 1.36

داریم

 0.085 = 1.36 * 2-4

 یعنی

 2e-127=  2-4   یا  e= 123ten = 01111011bin

1.36 = 1+f     یا  f= 0.36ten  ~ 0.01011100001010001111011bin .

چون داریم

a1  = [2f] = [0.72]  = 0

f  <---- 2f-a1  = 0.72

a2  = [2f] = [1.44]  = 1

f  <---- 2f-a2  = 1.44-1=0.44

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

f= 0.36ten  ~ 0.01011100001010001111011bin .

خلاصه:

 Fraction

 Exponent

 Sign

 

 0.36

 123

 0

 Decimal

 01011100001010001111011

 01111011

 0

 Binary

 

مثال. عدد زیر را به سیستم اعشاری تبدیل کنید

1 10000001 10110011001100110011010

همانطور که می دانیم:

بیت 31 (اولین بیت از چپ) بیت علامت

بیتهای 23 تا 30 (8 بیت بعدی) نما

بیتهای 0 تا 22 (در سمت راست) بیتهای کسر f

هستند.

 

بیت علامت 1 است لذا عدد منفی است: s=1.

نما:

e = 10000001bin = 129ten

e-127 = 129-127=2

کسر یا f:

0.10110011001100110011010bin = 1*2-1+0*2-2+1*2-3+1*2-4 +0*2-5+0*2-6+ ...
0.10110011001100110011010bin = 1/2 + 1/8 + 1/16 + ...=0.7000000476837158

با جایگذاری داریم:

(-1)s(1+f) 2 e - 127= (-1)1 (1.7000000476837158)2 129-127= -6.8

جهت تبدیل اعداد اعشاری به سیستم IEEE 754 به لینک زیر مراجعه کنید:

برای مطالعه بیشتر لازم است استاندارد

IEEE Standard for Floating-Point Arithmetic (IEEE 754)

را مطالعه کنید.

 با دریافت m-file زیر گزارشی(در حد کمتر از یک برگ) از نحوه توزیع اعداد در ماشین در سیستم IEEE 754 بنویسید.

floatgui.m

خطای خنثی سازی(Cancellation error)

از دست دادن ارقام با معنا(Loss of significance)

مثال از کتاب بوردن:

با در نظر گرفتن مقادیر

 x = 5/7,  y = 1/3

fl(x) = 0.71428 × 100 and fl(y) = 0.33333 × 100

u = 0.714251, v = 98765.9, w = 0.111111 × 10-4

fl(u) = 0.71425 × 100 , fl(v) = 0.98765 × 105 , fl(w) = 0.11111 × 10-4

جدولهای زیر را با 5 رقم قطع کردن بدست آورده و رشد خطا به دلیل خطای خنثی سازی(از دست رفتن ارقام با معنا) را مشاهده کنید.

 

 

 

فاجعه های ناشی از محاسبات عددی بد

 

محاسبات بد ممکن است منجر به خسارتهای پرهزینه و گاها غیرقابل جبران شود. در زیر سه مثال از این شکستها را ملاحظه می کنید:

 

Some disasters attributable to bad numerical computing

Have you been paying attention in your numerical analysis or scientific computation courses? If not, it could be a costly mistake. Here are some real life examples of what can happen when numerical algorithms are not correctly applied.

  • The Patriot Missile failure, in Dharan, Saudi Arabia, on February 25, 1991 which resulted in 28 deaths, is ultimately attributable to poor handling of rounding errors.
  • The explosion of the Ariane 5 rocket just after lift-off on its maiden voyage off French Guiana, on June 4, 1996, was ultimately the consequence of a simple overflow.
  • The sinking of the Sleipner A offshore platform in Gandsfjorden near Stavanger, Norway, on August 23, 1991, resulted in a loss of nearly one billion dollars. It was found to be the result of inaccurate finite element analysis.

هرکدام از موارد فوق را می توانید به عنوان پروژه کار کنید.

 

/ 0 نظر / 311 بازدید