2008-11-18, 11:29 PM
رایانه ها با اعداد با نقطهء اعشاری یک مشکل عام دارند، چون رایانه ها فقط میتوانند مقادیر متناهی با اندازهء ثابت را ذخیره کنند. اعداد اعشاری میتوانند هر طولی داشته باشند، شامل طول نامتناهی (دربارهء یک اعشار تکرارشونده، همچون نتیجهء ۱ تقسیم بر ۳ فکر کنید).
روشی که یک رایانه اعداد اعشاری را مدیریت میکند اینست که آنها را با یک دقت ثابت (تعداد بیتهای معنادار) ذخیره میکند. یک رایانه اعداد اعشاری را در دو بخش ذخیره میکند - «نما» و «مانتیس». مانتیس ارقامی را که عملا مورد استفاده قرار خواهند گرفت دربر دارد، و نما بزرگی عدد است. برای مثال، ۱۲۳۴۵٫۲ بصورت ۱٫۲۳۴۵ ضربدر ۱۰ به توان ۴ ذخیره میشود. مانتیس ۱٫۲۳۴۵ و نما ۴ است. تمام اعداد بصورت x.xxxxx * 10^xxxx ذخیره میشوند. عدد ۱ بصورت ۱٫۰۰۰۰۰ ضربدر ۱۰ بتوان صفر ذخیره میشود.
اکنون، مانتیس و نما فقط آنقدر طولانی هستند که منجر به بعضی مسائل جالب میشود. برای مثال، وقتی یک رایانه یک عدد صحیح را ذخیره میکند، اگر شما عدد ۱ را به آن بیافزایید، عدد نتیجه شده یکی بزرگتر میشود. این لزوما برای اعداد اعشاری اتفاق نمی افتد. اگر عدد بقدر کافی بزرگ باشد، همچون ۵٫۲۳۴ ضربدر ۱۰ به توان ۵۰۰۰، اضافه کردن ۱ بدان حتی ممکن است در مانتیس ثبت نشود (بیاد بیاورید، هر دو بخش فقط آنقدر طولانی هستند). این چند چیز را تحت تاثیر قرار میدهد، بخصوص ترتیب عملیات ها را. بگذارید بگوییم که من ۱ را به ۵٫۲۳۴ ضربدر ۱۰ بتوان ۵۰۰۰ چند میلیارد بار یا چند هزار میلیارد بار اضافه کنم. حدس بزنید چه میشود - عدد به کلی تغییری نمی کند. گرچه، اگر من یک را به تعداد کافی به خودش اضافه کنم، و سپس آنرا به عدد اصلی اضافه کنم، آن میتواند تغییری ایجاد کند.
========
منبع:
[ltr]
Programming from the Ground Up
by Jonathan Bartlett
Edited by Dominick Bruno, Jr.
Copyright © 2003 by Jonathan Bartlett
<!-- m --><a class="postlink" href="http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf">http://download.savannah.gnu.org/releas ... oksize.pdf</a><!-- m -->
[/ltr]
کسی اگر خاصیت و مثال دیگه ای هم میدونه بگه.
بنده در گذشته به چند باگ یا مشکل و رفتار گیج کننده در این ارتباط در برنامه هام برخورد کرده بودم و بنظرم موردهای دیگری از رفتارهای غیرمنتظره و غیرقابل توجیه (درصورت عدم اطلاع از این قضایا) در ارتباط با عملیات روی اعداد اعشاری رو دیده یا خونده بودم.
روشی که یک رایانه اعداد اعشاری را مدیریت میکند اینست که آنها را با یک دقت ثابت (تعداد بیتهای معنادار) ذخیره میکند. یک رایانه اعداد اعشاری را در دو بخش ذخیره میکند - «نما» و «مانتیس». مانتیس ارقامی را که عملا مورد استفاده قرار خواهند گرفت دربر دارد، و نما بزرگی عدد است. برای مثال، ۱۲۳۴۵٫۲ بصورت ۱٫۲۳۴۵ ضربدر ۱۰ به توان ۴ ذخیره میشود. مانتیس ۱٫۲۳۴۵ و نما ۴ است. تمام اعداد بصورت x.xxxxx * 10^xxxx ذخیره میشوند. عدد ۱ بصورت ۱٫۰۰۰۰۰ ضربدر ۱۰ بتوان صفر ذخیره میشود.
اکنون، مانتیس و نما فقط آنقدر طولانی هستند که منجر به بعضی مسائل جالب میشود. برای مثال، وقتی یک رایانه یک عدد صحیح را ذخیره میکند، اگر شما عدد ۱ را به آن بیافزایید، عدد نتیجه شده یکی بزرگتر میشود. این لزوما برای اعداد اعشاری اتفاق نمی افتد. اگر عدد بقدر کافی بزرگ باشد، همچون ۵٫۲۳۴ ضربدر ۱۰ به توان ۵۰۰۰، اضافه کردن ۱ بدان حتی ممکن است در مانتیس ثبت نشود (بیاد بیاورید، هر دو بخش فقط آنقدر طولانی هستند). این چند چیز را تحت تاثیر قرار میدهد، بخصوص ترتیب عملیات ها را. بگذارید بگوییم که من ۱ را به ۵٫۲۳۴ ضربدر ۱۰ بتوان ۵۰۰۰ چند میلیارد بار یا چند هزار میلیارد بار اضافه کنم. حدس بزنید چه میشود - عدد به کلی تغییری نمی کند. گرچه، اگر من یک را به تعداد کافی به خودش اضافه کنم، و سپس آنرا به عدد اصلی اضافه کنم، آن میتواند تغییری ایجاد کند.
========
منبع:
[ltr]
Programming from the Ground Up
by Jonathan Bartlett
Edited by Dominick Bruno, Jr.
Copyright © 2003 by Jonathan Bartlett
<!-- m --><a class="postlink" href="http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf">http://download.savannah.gnu.org/releas ... oksize.pdf</a><!-- m -->
[/ltr]
کسی اگر خاصیت و مثال دیگه ای هم میدونه بگه.
بنده در گذشته به چند باگ یا مشکل و رفتار گیج کننده در این ارتباط در برنامه هام برخورد کرده بودم و بنظرم موردهای دیگری از رفتارهای غیرمنتظره و غیرقابل توجیه (درصورت عدم اطلاع از این قضایا) در ارتباط با عملیات روی اعداد اعشاری رو دیده یا خونده بودم.