**اپسیلون ماشین** یا **دقت ماشین** حد بالایی برای خطای نسبی گرد کردن در محاسبات ممیز شناور (انگلیسی: Floating point arithmetic) می‌باشد. این مقدار محاسبات کامپیوتری را در زمینه آنالیز عددی و علوم محاسبه توصیف می‌کند. این مقدار گاهی **macheps** نیز نامیده می‌شود و نیز از نماد اپسیلون \varepsilon در زبان یونانی برای آن استفاده می‌شود.

غالبا دو تعریف برای این مقدار وجود دارد. در آنالیز عددی، این مقدار وابسته به شیوه گرد کردن است و گاهاً **خطای گرد کردن واحد** (انگلیسی: **unit roundoff**) نامیده می‌شود و با حرف انگلیسی بولد شده **u** نشان داده می‌شود. ولی با تعریفی عامیانه و پر استفاده تر، اپسیلون ماشینی از روش گرد سازی مستقل است و می‌تواند برابر **u** یا 2**u** باشد.

مقادیر برای محسابات سخت افزاری استاندارد
----------------------------------------

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

| استاندارد IEEE 754 - 2008 | نام متداول | نام تایپ در C++ | مبنا
*b* | دقت
*p* | اپسیلون ماشین{\displaystyle b^{-(p-1)}/2} | اپسیلون ماشین{\displaystyle b^{-(p-1)}} |
| --- | --- | --- | --- | --- | --- | --- |
| binary16 | half precision | *N/A* | 2 | 11(یک بیت ضمنی است) | 2−11 ≈ 4.88e-04 | 2−10 ≈ 9.77e-04 |
| binary32 | single precision | float | 2 | 24(یک بیت ضمنی است) | 2−24 ≈ 5.96e-08 | 2−23 ≈ 1.19e-07 |
| binary64 | double precision | double | 2 | 53(یک بیت ضمنی است) | 2−53 ≈ 1.11e-16 | 2−52 ≈ 2.22e-16 |
|  | extended precision, long double | \_float80 | 2 | 64 | 2−64 ≈ 5.42e-20 | 2−63 ≈ 1.08e-19 |
| binary128 | quad(ruple) precision | \_float128 | 2 | 113(یک بیت ضمنی است) | 2−113 ≈ 9.63e-35 | 2−112 ≈ 1.93e-34 |
| decimal32 | single precision decimal | \_Decimal32 | 10 | 7 | 5 × 10−7 | 10−6 |
| decimal64 | double precision decimal | \_Decimal64 | 10 | 16 | 5 × 10−16 | 10−15 |
| decimal128 | quad(ruple) precision decimal | \_Decimal128 | 10 | 34 | 5 × 10−34 | 10−33 |

1. ↑  بر اساس تعریف
2. ↑  بر اساس استفاده عامه تر و ثوابت استفاده شده در اکثر زبان های برنامه نویسی

تعریف قراردادی
--------------

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

برای محاسبه این مقدار به اطلاعات بیشتری نیاز داریم. یک سیستم عددی ممیز شناور توسط یک مبنا ، b، و یک دقت p (تعداد بیت های ضریب شامل هر تعداد بیت ضمنی)، توصیف می‌شود. اعداد با توان یکسان e دارای فاصله یکسان {\displaystyle b^{e-(p-1)}} می‌باشند. این فاصله در اعدادی که توان کامل b هستند تغییر می‌کند؛ فاصله اعداد در سمت با اندازه بزرگ تر، b برابر فاصله در سمت با اندازه کوچک تر است. 

از آنجا که اپسیلون ماشین کرانی برای خطای نسبی است، بدون از دست دادن کلیت مسئله می‌توان فرض کرد {\displaystyle e=0}. همچنین می‌توانیم فقط اعداد مثبت را بررسی کنیم. برای روش گرد کردن به نزدیک ترین، خطا حداکثر نصف فاصله بین اعداد، یا {\displaystyle b^{-(p-1)}/2} است. این عدد بزرگ ترین مقدار ممکن برای صورت در کسر خطای نسبی است. مخرج آن، عددی است که گرد می‌کنیم. برای پیدا کردن خطای حداکثر این عدد باید کوچک ترین مقدار ممکن را به خود اختصاص دهد. در نتیجه بدترین خطای نسبی هنگامی رخ می‌دهد که عدد ما به فرم {\displaystyle 1+a} که در آن a بین {\displaystyle 0} و {\displaystyle b^{-(p-1)}/2} باشد. تمام این اعداد به 1 گرد می‌شوند که خطای ما را برابر با {\displaystyle a/(1+a)} قرار می‌دهد. حداکثر آن هنگامی است که a در حد بالای برد خود باشد. {\displaystyle 1+a} در مخرج نسبت به صورت کسر قابل چشم پوشی است، پس برای تسریع محاسبات اپسیلون ماشین را فقط برابر با {\displaystyle b^{-(p-1)}/2} قرار می‌دهیم. نشان دادیم خطای نسبی برای اعدادی که به 1 گرد می‌شوند حداکثر است، به همین دلیل اپسیلون ماشین گاهی *خطای گرد کردن واحد*(انگلیسی: unit roundoff) نامیده می‌شود که به معنای "حداکثر خطایی که می‌تواند هنگام گرد کردن به مقدار واحد رخ دهد" است. 

در نتیجه اختلاف عدد ممیز شناور عادی سازه شده، x، و عدد ممیز شناور عادی سازه شده مجاورش حداکثر برابر با {\displaystyle 2\varepsilon |x|} است.

تعاریف دیگر
-----------

استاندارد IEEE اپسیلون ماشین و خطای گرد کردن واحد را تعریف نمی‌کند، به همین دلیل تعاریف متفاوتی برای آن ها ارائه داده شده که گاهاً باعث اختلافاتی می‌شود.

تعریف قراردادی آن، تعریفی است که توسط پروفسور جیمز دمل در کنفرانس هایش، پکیج جبر خطی *LAPACK*، شماری از مقاله های علمی و برخی از نرم افزار های محاسبه ای دیگر ارائه داده شده. اکثر تحلیل گران عددی با استفاده از این معنا از *اپسیلون ماشین* و *خطای گرد کردن واحد* به جای یکدگیر استفاده می‌کنند.

تعریف دیگر آن که تعریفی است که خارج از محیط آکادمیک متداول تر است: *اپسیلون ماشین تفاوت بین ۱ و کوچک ترین عدد ممیز شناور بزرگ تر از آن است.*

با این تعریف، \varepsilon برابر با {\displaystyle b^{-(p-1)}} است(b مبنا و p دقت سیستم ممیز اعشاری است) و خطای گرد کردن واحد با فرض گرد کردن به نزدیک ترین برابر با {\displaystyle \,=\varepsilon /2}**u،** و با فرض کف یا سقف گرفتن برابر با {\displaystyle \,=\varepsilon }**u** است.

شیوع این تعریف به دلیل استفاده آن در استاندارد ISO زبان C، برای ثابت های مربوط به تایپ های ممیز اعشاری، ثابت های متناظر در زبان های دیگر، استفاده فراگیر در نرم افزار های محاسباتی و تعدادی از مقالات مربوط به محاسبات عددی است.

منابع
-----

1. 1 2  "Floating Types (Using the GNU Compiler Collection (GCC))". *gcc.gnu.org* (به انگلیسی). Retrieved 2023-01-06.
2. 1 2 3  "Decimal Float (Using the GNU Compiler Collection (GCC))". *gcc.gnu.org* (به انگلیسی). Retrieved 2023-01-06.
3. ↑  جیمز دمل (21 October 1999). "Basic Issues in Floating Point Arithmetic and Error Analysis". *people.eecs.berkeley.edu* (به انگلیسی). University of California, Berkeley. Retrieved 2023-01-06. The distance between 1 and the next larger floating point number is 2\*macheps.
4. ↑  جیمز دمل (۱۹۹۹-۱۰-۲۱). "Basic Issues in Floating Point Arithmetic and Error Analysis". *people.eecs.berkeley.edu* (به انگلیسی). Retrieved 2023-01-07.
5. ↑  "LAPACK Users' Guide Third Edition". *netlib.org* (به انگلیسی). ۱۹۹۹-۰۸-۲۲. Retrieved 2023-01-07.
6. ↑  "number\_properties - Determine floating-point parameters". *help.scilab.org* (به انگلیسی). Retrieved 2023-01-07.
7. ↑  Jones, Derek M. (2009). *The New C Standard - An Economic and Cultural Commentary* (PDF) (به انگلیسی). p. ۳۷۷.
8. ↑  "float.h reference at cplusplus.com". *cplusplus.com* (به انگلیسی). Retrieved 2023-01-07.
9. ↑  «std::numeric\_limits reference at cplusplus.com». *cplusplus.com*. دریافت‌شده در ۲۰۲۳-۰۱-۰۷.
10. ↑  "پارامتر های مربوط به سیستم در زبان پایتون". *Python documentation* (به انگلیسی). Retrieved 2023-01-07.
11. ↑  *Extended Pascal ISO 10206:1990* (به انگلیسی), The value of **epsreal** shall be the result of subtracting 1.0 from the smallest value of real-type that is greater than 1.0.
12. ↑  "$MachineEpsilon—Wolfram Language Documentation". *reference.wolfram.com* (به انگلیسی). Retrieved 2023-01-07.
13. ↑  "داکیومنتیشن نرم افزار MATLAP". *www.mathworks.com* (به انگلیسی). Retrieved 2023-01-07. eps returns the distance from 1.0 to the next larger double-precision number
14. ↑  "داکیومنتیشن برنامه Octave در خصوص اپسیلون ماشین". *octave.sourceforge.io* (به انگلیسی). Retrieved 2023-01-07.