Машинний епсилон (англ. Machine epsilon) — верхня межа відносної похибки округлення чисел із рухомою комою. Абсолютне значення «машинного епсилон» залежить від розрядності сітки застосовуваної ЕОМ, типу (розрядності) використовуваних у розрахунках чисел, і від прийнятої в конкретному трансляторі структури подання дійсних чисел (кількості бітів, що відводяться на мантису і на порядок). Формально машинний епсилон зазвичай визначають як найменше з чисел ε, для якого під час машинних розрахунків з числами даного типу 1+ε>1. Альтернативне визначення — найбільше ε, для якого справедлива рівність 1+ε=1.
Практична важливість машинного епсилон пов'язана з тим, що два (відмінних від нуля) числа є однаковими з точки зору машинної арифметики, якщо модуль їх відносної різниці менший (за визначенням першого типу) або не перевершує (за визначенням другого типу) машинного епсилон.
Машинний нуль — числове значення з таким від'ємним порядком, що воно сприймається обчислювальною машиною як нуль.
У мовах програмування
Мова Сі
У мові Сі існують граничні константи FLT_EPSILON, DBL_EPSILON і LDBL_EPSILON, які є «машинними епсилон», відповідними першому визначенню: FLT_EPSILON = 2−23 ≈ 1.19e−07 — це машинний епсилон для чисел типу float (32 біти), DBL_EPSILON = 2−52 ≈ 2.20e−16 — для типу double (64 біти), і LDBL_EPSILON = 2−63 ≈ 1.08e−19 — для типу long double (80 біт). Для альтернативного визначення відповідні машинні епсилон будуть вдвічі меншими: 2−24, 2−53 і 2−64. У деяких компіляторах Сі (наприклад gcc, Intel's C/C++ compiler) допускається використання змінних четверної точності (_float128, _Quad). Відповідні машинні епсилон рівні 2−112 ≈ 1.93e−34 і 2−113 ≈ 9.63e−35.
Приклад
Приклад обчислення машинного епсилона мовою Сі.
float macheps(void) { float e = 1.0f; while (1.0f + e / 2.0f > 1.0f) e /= 2.0f; return e; }
Приклад мовою .
# include <iostream> # include <stdint.h> # include <iomanip> template<typename float_t, typename int_t> float_t machine_eps() { union { float_t f; int_t i; } one, one_plus, little, last_little; one.f = 1.0; little.f = 1.0; last_little.f = little.f; while(true) { one_plus.f = one.f; one_plus.f += little.f; if( one.i != one_plus.i ) { last_little.f = little.f; little.f /= 2.0; } else { return last_little.f; } } } int main() { std::cout << "machine epsilon:\n"; std::cout << "float: " << std::setprecision(18)<< machine_eps<float, uint32_t>() << std::endl; std::cout << "double: " << std::setprecision(18) << machine_eps<double, uint64_t>() << std::endl; }
Приклад на Python
def machineEpsilon(func=float): machine_epsilon = func(1) while func(1)+func(machine_epsilon) != func(1): machine_epsilon_last = machine_epsilon machine_epsilon = func(machine_epsilon) / func(2) return machine_epsilon_last
Виведення може бути таким (з використанням IPython):
In [1]: machineEpsilon(int) Out[1]: 1
In [2]: machineEpsilon(float) Out[2]: 2.2204460492503131e-16
In [3]: machineEpsilon(complex) Out[3]: (2.2204460492503131e-16+0j)
Див. також
Примітки
- Подбельский В. В., Фомин С. С. Программирование по на языке Си: Учеб.пособие. М.: Финансы и статистика, 2003.
- (PDF). Архів оригіналу (PDF) за 7 вересня 2021. Процитовано 7 вересня 2021.
- Игорь Юсупович Алибеков. [1] — МГИУ, 2008-01-01. — 221 с. — . з джерела 7 вересня 2021
- [2] — Directmedia, 2014-05-20. — 432 с. — . з джерела 7 вересня 2021
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Mashinnij epsilon angl Machine epsilon verhnya mezha vidnosnoyi pohibki okruglennya chisel iz ruhomoyu komoyu Absolyutne znachennya mashinnogo epsilon zalezhit vid rozryadnosti sitki zastosovuvanoyi EOM tipu rozryadnosti vikoristovuvanih u rozrahunkah chisel i vid prijnyatoyi v konkretnomu translyatori strukturi podannya dijsnih chisel kilkosti bitiv sho vidvodyatsya na mantisu i na poryadok Formalno mashinnij epsilon zazvichaj viznachayut yak najmenshe z chisel e dlya yakogo pid chas mashinnih rozrahunkiv z chislami danogo tipu 1 e gt 1 Alternativne viznachennya najbilshe e dlya yakogo spravedliva rivnist 1 e 1 Podannya mashinnogo nulya v chislah z ruhomoyu komoyu za dvoznachnogo poryadku Praktichna vazhlivist mashinnogo epsilon pov yazana z tim sho dva vidminnih vid nulya chisla ye odnakovimi z tochki zoru mashinnoyi arifmetiki yaksho modul yih vidnosnoyi riznici menshij za viznachennyam pershogo tipu abo ne perevershuye za viznachennyam drugogo tipu mashinnogo epsilon Mashinnij nul chislove znachennya z takim vid yemnim poryadkom sho vono sprijmayetsya obchislyuvalnoyu mashinoyu yak nul U movah programuvannyaMova Si U movi Si isnuyut granichni konstanti FLT EPSILON DBL EPSILON i LDBL EPSILON yaki ye mashinnimi epsilon vidpovidnimi pershomu viznachennyu FLT EPSILON 2 23 1 19e 07 ce mashinnij epsilon dlya chisel tipu float 32 biti DBL EPSILON 2 52 2 20e 16 dlya tipu double 64 biti i LDBL EPSILON 2 63 1 08e 19 dlya tipu long double 80 bit Dlya alternativnogo viznachennya vidpovidni mashinni epsilon budut vdvichi menshimi 2 24 2 53 i 2 64 U deyakih kompilyatorah Si napriklad gcc Intel s C C compiler dopuskayetsya vikoristannya zminnih chetvernoyi tochnosti float128 Quad Vidpovidni mashinni epsilon rivni 2 112 1 93e 34 i 2 113 9 63e 35 PrikladPriklad obchislennya mashinnogo epsilona movoyu Si float macheps void float e 1 0f while 1 0f e 2 0f gt 1 0f e 2 0f return e Priklad movoyu C include lt iostream gt include lt stdint h gt include lt iomanip gt template lt typename float t typename int t gt float t machine eps union float t f int t i one one plus little last little one f 1 0 little f 1 0 last little f little f while true one plus f one f one plus f little f if one i one plus i last little f little f little f 2 0 else return last little f int main std cout lt lt machine epsilon n std cout lt lt float lt lt std setprecision 18 lt lt machine eps lt float uint32 t gt lt lt std endl std cout lt lt double lt lt std setprecision 18 lt lt machine eps lt double uint64 t gt lt lt std endl Priklad na Pythondef machineEpsilon func float machine epsilon func 1 while func 1 func machine epsilon func 1 machine epsilon last machine epsilon machine epsilon func machine epsilon func 2 return machine epsilon last Vivedennya mozhe buti takim z vikoristannyam IPython In 1 machineEpsilon int Out 1 1 In 2 machineEpsilon float Out 2 2 2204460492503131e 16 In 3 machineEpsilon complex Out 3 2 2204460492503131e 16 0j Div takozh 0 programuvannya PrimitkiPodbelskij V V Fomin S S Programmirovanie po na yazyke Si Ucheb posobie M Finansy i statistika 2003 PDF Arhiv originalu PDF za 7 veresnya 2021 Procitovano 7 veresnya 2021 Igor Yusupovich Alibekov 1 MGIU 2008 01 01 221 s ISBN 9785276014623 z dzherela 7 veresnya 2021 2 Directmedia 2014 05 20 432 s ISBN 9785445838753 z dzherela 7 veresnya 2021