اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

دقت اعداد اعشاری در بازه‌های مختلف

0 امتیاز
1,360 نمایش

با توجه به ذخیره‌سازی اعداد اعشاری، آیا دقت یک عدد اعشاری در بازه‌ی کل اعدادی که می‌تونه نگه داره ثابته؟ مثلاً این طوری نیست که بگیم برای اعداد بزرگ دقت کمتر می‌شه؟ یا مثلاً برای اعداد خاصی دقت از اعداد دیگه بیشتره؟

اگه تفاوتی وجود داره فرمولی هم می‌شه ارائه داد که یک عدد بگیره و دقت ریاضی اون رو وقتی که در کامپیوتر ذخیره بشه بده؟

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پرسیده شده شنبه ۱۰ فروردین ۱۳۹۲ در C++ توسط prodo  
بازتگ شده پنجشنبه ۱۷ مرداد ۱۳۹۲ توسط prodo

1 پاسخ

0 امتیاز

با توجه به این که در C++ از IEEE754 استفاده می‌شه پس باید دقت اعداد اعشاری رو در این استاندارد بررسی کنیم.

دقت عدد اعشاری در سیستم IEEE754 به توان ۲ بستگی داره. از اون‌جا که تعداد ارقام توان برای اعداد اعشاری در بازه‌های مختلف ثابت هست و به استاندارد مربوطه، بنابراین دقت اعداد اعشاری در بازه‌های مختلف تفاوتی نداره.

به طور کلی دقت اعداد اعشاری در بازه‌های کوچک‌تر بیشتر و در بازه‌های بزرگ‌تر کمتر هست. فرض کنیم یک عدد به صورت ممیز شناور ذخیره شده دقت به صورت زیر محاسبه می‌شه

precision = 2^{p-s+1}

که s تعداد ارقام بامعنی در اون نوع داده‌ی ممیز شناور و p توان به دست اومده قبل از تاثیر آفست هست.

در روش ذخیره‌سازی ممیز شناور، اعداد با n رقم اعشار در نزدیکی صفر به هم نزدیک‌تر هستند تا اعداد با n رقم اعشار در نزدیکی یک و اعداد با n رقم اعشار در نزدیکی یک به هم نزدیک‌تر هستند تا اعداد با n رقم اعشار در نزدیکی دو. بنابراین

قاعده‌ی کلی: در ممیز شناور هرچه اعداد بزرگ‌تر می‌شوند (در صورتی که از نظر ریاضی دقت آن‌ها ثابت باشد) از نظر پیاده‌سازی IEEE754 دقت آن‌ها کمتر می‌شود.

مثال: عدد 1.123412341234 از نظر ریاضی دقتی برابر 1234.123412341234 دارد اما از نظر پیاده‌سازی ممیز شناور دقت عدد بزرگ‌تر کمتر خواهد بود.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده چهارشنبه ۱۹ تیر ۱۳۹۲ توسط prodo  
ویرایش شده یکشنبه ۱۹ آبان ۱۳۹۲ توسط prodo