what is machine epsilon ? کارکردن با اعداد اعشاری تو دنیای کامپیوتر به راحتی دنیای واقعی نیست. همیشه باید مراقب اونها باشیم مخصوصا موقع مقایسه اعداد اعشتری با همدیگه. ذخیره سازی اعداد اعشاری تو کامپیوتر هم دردسرهای خاص خودشو داره. این مقاله قصد نداره زیاد تخصصی حرف بزنه فقط میخواد که کلمات کلیدی رو بگیه و این خود شما هستین که باید برین سرچ کنین راجع به اون کلمات و مفاهیم. خب اول اجازه بدین یه مثال رو بررسی کنیم. تو هر زبان برنامه‌نویسی که هستین این مثال رو با اون زبان برا خودتون امتحان کنین. من اینجا از php استفاده می‌کنم. خب از اونجایی که منهای . میشه . پس ما انتظار داریم اینجا شرط if درست باشه و عبارت True چاپ بشه. اما همونطور که خودتون با زبان دلخواه خودتون مثل پایتون، سی، سی پلاس پلاس جاوا یا هر زبان دیگه‌ای اجرا کردین و مشاهده کردین که True چاپ نمیشه. اما چرا؟ ! خب چیزی که حدس زدنش الان منطقیه اینه که: "خب حتما . - با . دقیقا مساوی نیستن!" و خب این حدس درستم هست. واقعیت اینه که . - کمی با . اختلاف دارن. اما این اختلاف خیلی ناچیزه. در حد اپسیلون! اگه میخواین دلیل این اتفاق رو بدونین کمی در مورد ذخیره سازی اعداد و مخصوصا اعداد اعشاری تو خافظه سرچ کنین. اینجا ما میخوایم راه حل این مشکل رو بگیم. بریم سراغ اصل مطلب: machine epsilon چیه؟ در واقع machine epsilon کوچک ترین عدد مثبت بزرگ تر از صفره. یعنی مرز بین صفر و یه عدد بزرگ تر از صفر در واقع بازم انگار صفره. و اون عدد بزرگ خر از صفر میشه epsilon . یکم ریاضی تر بگیم اینجوری میشه: حالا کوچک ترین عددی که بشه جای e گذاشت میشه اپسیلون. تو کامپیوتر و تو هر کامپیوتر به صورت مستقل یه machin epsilon متفاوت ممکنه داشته باشیم. خب میشه نتیجه گرفت اگر حاصل تفریق دو عدد کوچیک تر از مقدار اپسیلون باشه اون دو عدد مساوی‌ان. اگر هر عدد کوچیک تر از machine epsilone رو به یه عدد اضافه کنیم یا ازش کم کنیم اون عدد هیچ تغییری نمیکنه. پس ما میتونیم از این روش بفهمیم اگر اختلاف اون دو عدد کوچیک تر از اپسیلون بود در واقع اون دو عدد مساوی ان. مثال بالا رو اصلاح میکنیم. فرض کنیم متغییر epsilon $ مقدار machine epsilon رو تو خودش ذخیره کرده: خب مشکلمون حل شد ولی مقدار اپسیلون چطور به دست میاد؟ معمولا تو اکثر زبان ها این مقدار تو یه ثابت ذخیره میشه. میتونین برا زبان خودتون سرچ کنین. مثلا برا پایتون تو کتابخونه sys و تو float _ info ذخیره شده: در زبان php تو ثابت PHP _ FLOAT _ EPSILON ذخیره شده. خودمون هم میتونیم این مقدار رو به دست بیاریم. حالا مثلا اگه: باشه، عبارت زیر درسته: