Epsilon mikroprocesoru (zkráceně eps ) udává horní hranici relativní chyby aproximace způsobené zaokrouhlením výpočtů tohoto mikroprocesoru aritmetikou s plovoucí desetinnou čárkou . Tato hodnota je charakteristikou počítačové aritmetiky v oblasti numerické analýzy a rozšířením v předmětu vědecké práce na počítači . Epsilon se také nazývá machepy nebo zaokrouhlovací jednotka . To je někdy známé pomocí řeckého symbolu epsilon nebo tučně Roman u .
Následující standardní hodnoty epsilon platí pro hardware implementující standardy pro výpočet pohyblivé řádové čárky IEEE:
IEEE 754 - 2008 | Obvyklé jméno | Datový typ C ++ | Na základě | Přesnost | Epsilon | Epsilon |
---|---|---|---|---|---|---|
binární16 | poloviční přesnost | šortky | 2 | 11 (jeden z bitů je implicitní) | 2 −11 ≈ 4,88 e-04 | 2 −10 ≈ 9,77 e-04 |
binary32 | jednoduchá přesnost | plovák | 2 | 24 (jeden z bitů je implicitní) | 2 −24 ≈ 5,96 e-08 | 2 −23 ≈ 1,19 e-07 |
binary64 | dvojnásobná přesnost | dvojnásobek | 2 | 53 (jeden z bitů je implicitní) | 2 −53 ≈ 1,11 e-16 | 2 −52 ≈ 2,22 e-16 |
? | rozšířená přesnost (v) | _float80 | 2 | 64 | 2 −64 ≈ 5,42 e-20 | 2 −63 ≈ 1,08e-19 |
binary128 | čtyřnásobná přesnost | _float128 | 2 | 113 (jeden z bitů je implicitní) | 2 −113 ≈ 9,63 e-35 | 2 −112 ≈ 1,93e-34 |
desítkové32 | jednoduchá desetinná přesnost | _Decimal32 | 10 | 7 | 5 × 10 −7 | 10 −6 |
decimal64 | dvojnásobná desetinná přesnost | _Decimal64 | 10 | 16 | 5 × 10 −16 | 10 −15 |
desítkové128 | čtyřnásobná přesnost desetinných míst | _Decimal128 | 10 | 34 | 5 × 10 −34 | 10 −33 |
Postup zaokrouhlování je postup pro výběr reprezentace reálného čísla v systému s plovoucí desetinnou čárkou . Vzhledem k tomuto systému číslování a postupu zaokrouhlování je epsilon maximum relativní chyby aproximace zvoleného postupu zaokrouhlování.
Další definice a informace umožňují vypočítat epsilon z relativní chyby. Systém čísel s plovoucí desetinnou čárkou se vyznačuje základnou a přesností , která udává počet číslic mantisy (včetně jakýchkoli implicitních bitů). Čísla představovaná exponentem jsou od sebe vzdálena hodnotou . Mezery se změní na čísla, jejichž jsou celé mocniny ; rozestup strany větší velikosti je krát větší než rozestup strany menší velikosti.
Protože epsilon je vázán na relativní chybu aproximace, nezávisí to na exponentu. K jeho určení tedy stačí vzít v úvahu případ, kdy je exponent nulový. Postačí také zvážit kladná čísla. Pro obvyklé zaokrouhlování, to znamená zaokrouhlování na nejbližší číslo, je absolutní chyba aproximace nanejvýš poloviční roztečí . Tato hodnota je největší možnou hodnotou pro čitatel relativní chyby. Jmenovatel vzorce je číslo, které má být zaobleny, což by mělo být tak malé, jak je to možné, aby relativní chyba být velký. Nejhorší relativní chyba proto nastane, když se zaokrouhlení použije na čísla formuláře , kde je mezi a . Všechna tato čísla jsou zaokrouhlována směrem k relativní chybě . Maximum je dosaženo na horním konci tohoto intervalu. Jmenovatel hodnoty je ve srovnání s čitatelem zanedbatelný, takže jej lze pro větší pohodlí ignorovat; epsilon je tedy dán vzorcem . Relativní chyba je největší u čísel, která se zaokrouhlují směrem k , což umožňuje volat epsilon také někdy zaokrouhlující jednotku k neformálnímu označení „maximální možné relativní chyby při zaokrouhlování směrem k l.„ Jednotce “.
Maximální vzdálenost mezi normalizovaným číslem s plovoucí desetinnou čárkou x a sousedním normalizovaným číslem je tedy .
Na numerické analýzy použití epsilon stroji zkoumat účinky zaokrouhlení chyby. Skutečné hodnoty aritmetických chyb stroje jsou obecně příliš komplikované na to, aby se daly přímo studovat; proto se používá jednoduchý model. IEEE Arithmetic Standard definuje, že všechny operace s plovoucí desetinnou čárkou se počítají za předpokladu, že je možné provádět operace s nekonečnou přesností, a poté za předpokladu, že se výsledek zaokrouhlí na číslo s plovoucí desetinnou čárkou. Předpokládejme, že jde o čísla s plovoucí desetinnou čárkou, což je aritmetická operace s čísly s plovoucí desetinnou čárkou, jako je sčítání nebo násobení, a to je operace prováděná s nekonečnou přesností. Podle standardu počítač počítá Podle definice epsilonu je relativní chyba zaokrouhlování maximálně jeho velikosti, takže kde se v absolutní velikosti rovná nanejvýš epsilonu. Práce Demmela a Highama v referencích si můžete prohlédnout, abyste zjistili, jak se tento model používá pro analýzu chyb algoritmů, jako je eliminace Gauss.
Standard IEEE nedefinuje pojmy epsilon stroje nebo zaokrouhlení jednotky . Výsledkem je, že existují definice pro definice, které se někdy používají v praxi, což může vést k určitému zmatku.
Definice zde uvedená pro stroj epsilon je definována profesorem Jamesem Demmelem v jeho přednáškách a jeho lineárním algebraovém softwaru LAPACK a v článcích vědeckého výzkumu o numerickém výpočtu a určitém vědeckém výpočetním softwaru. Většina digitálních analytiků používá termíny strojový epsilon a jednotkové zaokrouhlování jako synonymní termíny, přičemž má zde uvedenou definici.
Následující definice je mnohem běžnější mimo akademickou obec: epsilon je definován jako nejmenší číslo, které přidané k jednomu dává jiný výsledek než jeden. S touto definicí se epsilon rovná jednotkové hodnotě na posledním místě (in) vzhledem k 1, tj. Pro zaokrouhlování na nejbližší u procedury . Prevalence této definice pochází z jejího použití v normě ISO jazyka C, zejména z definice konstant týkajících se typů s plovoucí desetinnou čárkou a ekvivalentů s jinými programovacími jazyky. To je také široce používán ve světě vědeckého výpočetního softwaru, v číslech a výpočtové literatuře a v jiných akademických zdrojích.
V případech, kdy standardní knihovny neposkytují předpočítané hodnoty (jako < float.h (en) > s FLT_EPSILON, DBL_EPSILONa LDBL_EPSILONv C a < limity > s v C ++), je nejlepší způsob, jak zjistit epsilon d 'a stroj má odkazovat na výše uvedenou tabulku a použít příslušný vzorec výkonu. Číselná gramotnost se často uvádí jako cvičení v učebních příručkách. Následující příklady používají nastavení vzdálenosti pro čísla s plovoucí desetinnou čárkou na 1 místo nastavení zaokrouhlovací jednotky. std::numeric_limits<T>::epsilon()
Všimněte si, že výsledky závisí na typu čísla s plovoucí desetinnou čárkou (například float , double , long double nebo ekvivalentní typy v jiných programovacích jazycích), použitém překladači a knihovnách a nakonec na platformě, kde bude program spuštěn.
Některé formáty podporované mikroprocesorem nemusí být podporovány vybraným kompilátorem nebo operačním systémem. Runtime knihovna někdy emuluje jiné typy, včetně aritmetiky s libovolnou přesností , která je k dispozici v některých jazycích a knihovnách.
Přesněji řečeno, termín epsilon označuje přesnost 1 + eps přímo podporovanou procesorem (nebo koprocesorem), a nikoli přesnost 1 + eps podporovanou konkrétním kompilátorem pro konkrétní operační systém, pokud není známo, že používá nejlepší dostupné formát.
IEEE 754 plovoucí čárkou typy mají vlastnost, když interpretován jako celé číslo dvě části kódované celá čísla o stejné velikosti, aby růst monotónně na pozitivní hodnoty a snížit monotónně na hodnoty negativní (viz binární reprezentace 32bitové plováky (en ) ). Kromě toho, pokud f ( x ) je interpretace x v doplňku 2 uvedeného výše, pak 0 <| f ( x ) | <∞ a | f ( x +1) - f ( x ) | ≥ | f ( x ) - f ( x -1) |. V jazycích, které umožňují typ reinterpretace (in) při použití IEEE 754-1985, můžeme toto využít k výpočtu epsilonu v konstantním čase. Například v C:
typedef union { long long i64; double d64; } dbl_64; double machine_eps (double value) { dbl_64 s; s.d64 = value; s.i64++; return s.d64 - value; }Výsledek je stejný znak jako value. Pokud si přejete získat vždy pozitivní výsledek, lze instrukci návratu této rutiny nahradit:
return (s.i64 < 0 ? value - s.d64 : s.d64 - value);U 64bitových čísel s dvojitou přesností je výsledkem 2,220446e-16 nebo 2 -52 podle očekávání.
Následující velmi jednoduchý algoritmus lze použít k lineárnímu hledání aproximace epsilon stroje, faktoru dva ( řádově ) jeho skutečné hodnoty .
epsilon = 1.0; tant que (1.0 + 0.5 * epsilon) ≠ 1.0: epsilon = 0.5 * epsilon