Mašinski Epsilon

С Википедије, слободне енциклопедије

Mašinski Epsilon daje gornju granicu relativne greške zbog zaokruživanja aritmetike plutajućih tačaka.Ova vrednost karakteriše računarsku aritmetiku u polju brojčane analize,a produžava se u predmetu računarske nauke.Količina se takođe naziva i "macheps" ili jedinica zaokruživanja,a označava se Grčkim simbolom Epsilon ε ili Romanskim slovom u.

Vrednosti za standardnu hardversku aritmetiku sa plutajućim tačkama[уреди | уреди извор]

Date vrednosti mašinskog epsilona važe za standarde formata plutajućih tačaka:

IEEE 754 - 2008 Uobičajno ime C++ tip podatka Baza Preciznost Mašinski epsilon [а] Mašinski epsilon [б]
binary16 polu precizan short 2 11 (jedan bit je implicitan) 2−11 ≈ 4.88e-04 2−10 ≈ 9.77e-04
binary32 precizan float 2 24 (jedan bit je implicitan) 2−24 ≈ 5.96e-08 2−23 ≈ 1.19e-07
binary64 duplo precizan double 2 53 (jedan bit je implicitan) 2−53 ≈ 1.11e-16 2−52 ≈ 2.22e-16
produženo precizan _float80 [1] 2 64 2−64 ≈ 5.42e-20 2−63 ≈ 1.08e-19
binary128 četvorostruko precizan _float128 2 113 (jedan bit je implicitan) 2−113 ≈ 9.63e-35 2−112 ≈ 1.93e-34
decimal32 precizna decimala _Decimal32 [2] 10 7 5 × 10−7 10−6
decimal64 duplo precizna decimala _Decimal64 10 16 5 × 10−16 10−15
decimal128 četvorostruko precizna decimala _Decimal128 10 34 5 × 10−34 10−33
  1. ^ Prema Prof. Demmel, LAPACK, Scilab
  2. ^ Prema Prof. Higham; ISO C standard; C, C++ i Python jezičke konstante; Mathematica, MATLAB i Octave; razne sveske - pogledajte dole za drugu definiciju

Formalna definicija[уреди | уреди извор]

Zaokruživanje je postupak odabira predstavljajućeg realnog broja u sistemu sa plutajućim tačkama.Za brojni sistem i proceduru zaokruživanja , mašina epsilon predstavlja maksimalnu relativnu grešku od izabrane procedure zaokruživanja.

Određeno prethodno izračunavanje je potrebno da bi se odredila vrednost iz ove definicije.Sistem plutajućih brojeva je karakterizovan radiksom koji se drugačije naziva i baza , ,i preciznošću , tj. broj radiks cifara significanda (uključujući bilo koji vodeći implicitni broj).Svi brojevi sa istim stepenom, ,imaju razmak .Razmak se menja na brojevima koji su savršenog stepena od ; razmak sa strane veće veličine je za puta veći od razmaka sa strane manje veličine.

Pošto je mašinski epsilon vezan za relativnu grešku , dovoljno je uzeti u obzir brojeve sa eksponentom .Takođe je dovoljno razmotriti i pozitivne brojeve.Za uobičajenu vrstu zaokruživanja na najbliži broj , apsolutna greška zaokruživanja je veća polovina razmaka ili .Ova vrednost je najveći mogući brojilac relativne greške.Imenilac u relativnoj grešci je broj koji se zaokružuje , koji bi trebao da je što moguće manji da bi relativna greška bila veća.Stoga , najgora relativna greška se dešava kada se zaokruživanje primenjuje na brojeve obrasca gde je između i .Svi ovi brojevi se zaokrugljuju na sa relativnom greškom .Maksimum se javlja kada je na gornjem kraju svog opsega. je u imeniocu zanemarljiv sa brojiocem , tako da se ne koristi za probitačnost i samo se uzima kao mašinski epsilon.Kao što je prikazano ovde , relativna greška je najgora za brojeve koji se zaokružuju na , tako da se mašinski epsilon takođe naziva zaokrugljivač jedinica , što znači "maksimalna greška koja se može pojaviti pri zaokruživanju do vrednosti jedinice".Dakle , maksimalan razmak između normalizovanog broja plutajuće tačke , , i susednog normalizovanog broja je x . [3]

Aritmetički model[уреди | уреди извор]

Brojčana analiza koristi mašinski epsilon za istraživanje efekata grešaka tokom zaokruživanja.Stvarne greške mašinske aritmetike su suviše komplikovane da bi se direktno proučavale , pa se zbog toga koristi sledeći jednostavni model.IEEE Aritmetički standard nalaže da su sve operacije sa plutajućim tačkama izvršene kao da je moguće odraditi beskonačno-preciznu operaciju , a zatim je broj zaokružen na broj sa plutajućim tačkama.Pretpostavimo da su (1) i brojevi sa plutajućim tačkama , da je (2) aritmetička operacija brojeva sa plutajućim tačkama , kao što je deljenje ili množenje i (3) beskonačno-precizna operacija.Prema standardu , računar izračunava:

Prema značenju mašinskog epsilona , relativan greška zaokruživanja je većina mašinskog epsilona po veličini , tako da:

gde je u apsolutnoj magnitudi najviše ili u.Knjige Demmela i Highama u referencama se mogu konsultovati kako bi se videlo kako se ovaj model koristi za analizu grešaka , recimo , Gaussove eliminacije.

Varijante definicije[уреди | уреди извор]

IEEE standard ne definiše  pojmove mašinskog epsilona i jedinice zaokruživanja, tako da se koriste različite definicije ovih termina, što može dovesti do zabune.

Definicija koja je ovde data za mašinski epsilon je ona koju koristi profesor Džejms Dimel u scenariju predavanja [4] , njegov LAPACK linearni algebra pokret [5], numerički istraživački radovi [6] i neki naučni računarski softveri [7]. Većina numeričkih analitičara upotrebljava reči mašinski epsilon i jedinica zaokruživanja sa tim značenjem.

Sledeća različita definicija je mnogo šire rasprostranjena izvan akademije: Mašinski epsilon je definisan kao najmanji broj, kada se doda jednom, daje rezultad drugačiji od jednog. Po ovoj definiciji , jednak je vrednosti jedinice na poslednjem mestu u odnosu na 1, tj. [8] i za proceduru zaokruživanja od kruga do najbliže, u .Prevalenca ove definicije korišćena je u njegovoj upotrebi u ISOC standardu za konstantne vezane za tipove sa plutajućim tačkama [9] [10] i odgovarajuće konstantne u drugim programskim jezicima .[11] [12] Takođe se široko koristi u naučnom računarskom softveru [13] [14] [15] u numeričkoj i računarskoj literaturi [16] [17] [18] [19] i drugim akademskim resursima.[20] [21]

Kako odrediti mašinski epsilon[уреди | уреди извор]

Gde standardi biblioteke ne pružaju predračunate vrednosti (kao što je <plutajuće.h> radi sa FLT_EPSILON,DBL_EPSILON i LDBL_EPSILON za C i<ograničenja>radi sa standardom : numeričko_ograničenje<T>:epsilon ()u C++), najbolji način za određivanje mašinskog epsilona je da se odnosi na tabelu,gore, i koristi odgovarajuća formula. Računarski mašinski epsilon se često daje kao vežba udžbenicima. Sledeći primeri izračunavanja mašinskog epsilona u smislu razmaka brojeva sa plutajućim tačkama na 1, a ne u smislu jedinice zaokruživanja.

Imajte na umu da rezultati zamise od određenog formata sa plutajućim tačkama, kao što su plutajuće,duple,duple duplei ili slično kao što su podržane od strane programskog jezika, prevodioca i biblioteke istraživanja za stvarnu platformu.

Neki formati koje podržava procesor možda ne podržava izabrani prevodilac i operativni sistem. Drugi formati mogu imitirati izvrsavanje biblioteke, uključujući i proizvoljne aritmetički dostupne na nekim jezicima i bibliotekama.

U striktnom smislu pojam mašinski epsilon znači tačnost 1+eps direktno podržana od strane procesora (ili koprocesora), ne nekih 1+eps  preciznosti koje podržava odeđeni prevodilac za određeni operativni sistem, ocim ako nije poznato da koristi najbolji format.

Oblici IEEE 754 sa plutajućim tačkama imaju svojstvo koje, kada se reinterpretiraju dva komplementarna cela broja iste širine , monotonično se povećava preko pozitivnih vrednosti i monotonično smanjuje negativne vrednosti (pogledajte binarno prdstavljanje 32-bitnih plovaka). Takođe imaju svojstvo da 0 < |f(x)| < ∞, and |f(x+1) − f(x)| ≥ |f(x) − f(x−1)|(gde je f(x) ranije pomenuti ceo broj reinterpretacije x). Na jezicima koji omogućavaju tip punjenja  i uvek koriste IEEE 754-1985, možemo to iskoristiti za izračunavanje mašinskog epsilona u konstantnom bremenu. Na primer, u 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;
}

Ovo će dati rezultat istog znaka kao i vrednost. Ako je pozitivan rezultat uvek poželjan, povratan izkaz mašinskog epsilona se može zameniti sa:

    return (s.i64 < 0 ? value - s.d64 : s.d64 - value);

64-bitni dupli daju 2,220446e-16, što je 2-52 kao što se očekivalo.

Približnost[уреди | уреди извор]

Sledeći jednostavni algoritam mpže se koristiti za približnost mašinskog epsilona u okviru faktora od dva(jedan red veličine)njegove istaknute vrednosti, koristeći linearnu pretragu:

epsilon = 1.0; 

while (1.0 + 0.5 * epsilon) <> 1.0: 
   epsilon = 0.5 * epsilon

Takođe pogledaj i[уреди | уреди извор]

  • Floating point (plutajuća tačka), opšta diskusija o tačnosti problema u aritmetici sa plutajućim tačkama.

Reference[уреди | уреди извор]

  1. ^ "Floating Types - Using the GNU Compiler Collection (GCC)"
  2. ^ "Decimal Float - Using the GNU Compiler Collection (GCC)"
  3. ^ Higham, Nicholas (2002). Accuracy and Stability of Numerical Algorithms (2 ed). SIAM. p. 37.
  4. ^ "Basic Issues in Floating Point Arithmetic and Error Analysis" 21.10.1999. Vraćeno 11.4.2013.
  5. ^ "LAPACK Users' Guide Third Edition." 22 August 1999. Retrieved 9 March 2012.
  6. ^ "David Goldberg: What Every Computer Scientist Should Know About Floating-Point Arithmetic, ACM Computing Surveys, Vol 23, No 1, March 1991" Архивирано на сајту Wayback Machine (1. новембар 2016)(PDF). Retrieved 11 Apr 2013.
  7. ^ "Scilab documentation - number_properties - determine floating-point parameters"Retrieved 11 Apr 2013.
  8. ^ Primetimo da je ovde P definisano kao preciznost , tj. kao ukupan broj bitova u Significand-u uključujući implicitni glavni bit, koji se koristi u gornjoj tabeli
  9. ^ Jones, Derek M. (2009). " The New C Standard - An Economic and Cultural Commentary" (PDF). p. 377.
  10. ^ "float.h referenca na cplusplus.com" Retrieved 11 Apr 2013.
  11. ^ "std::numeric_limits referenca na cplusplus.com" Retrieved 11 Apr 2013.
  12. ^ "Python documentation - System-specific parameters and functions" Retrieved 11 Apr 2013.
  13. ^ "Mathematica documentation: $MachineEpsilon"Retrieved 11 Apr 2013.
  14. ^ "Matlab documentation - eps - Floating-point relative accuracy"Arhiviran iz "originala" 2013-08-07. Retrieved 11 Apr 2013.
  15. ^ "Octave documentation - eps function" Retrieved 11 Apr 2013.
  16. ^ Higham, Nicholas (2002). Preciznost i stabilnost Numeričkih Algoritama (2 ed). SIAM. pp. 27–28.
  17. ^ Quarteroni, Alfio; Sacco, Riccardo; Saleri, Fausto (2000)"Numerical Mathematics" Архивирано на сајту Wayback Machine (14. новембар 2017) (PDF). Springer. p. 49. "ISBN""0-387-98959-5"
  18. ^ Press, William H.; Teukolsky, Saul A.; Vetterling, William T.; Flannery, Brian P. Numerički recepti. p. 890.
  19. ^ Engeln-Müllges, Gisela; Reutter, Fritz (1996). Numerik-Algorithmen. p."ISBN""3-18-401539-4."
  20. ^ "Robert M. Corless: The Machine Epsilon"28 Jun 2005. Retrieved 11 Apr 2013.
  21. ^ "MCS 471 Computer Problem 1"2004. Retrieved 11 Apr 2013.
  • Anderson, E.; LAPACK Users' Guide, Society for Industrial and Applied Mathematics (SIAM), Philadelphia, PA, third edition, 1999.
  • Cody, William J.; MACHAR: A Soubroutine to Dynamically Determine Machine Parameters, ACM Transactions on Mathematical Software, Vol. 14(4), 1988, 303-311.
  • Besset, Didier H.; Object-Oriented Implementation of Numerical Methods, Morgan & Kaufmann, San Francisco, CA, 2000.
  • Demmel, James W., Applied Numerical Linear Algebra, Society for Industrial and Applied Mathematics (SIAM), Philadelphia, PA, 1997.
  • Higham, Nicholas J.; Accuracy and Stability of Numerical Algorithms, Society for Industrial and Applied Mathematics (SIAM), Philadelphia, PA, second edition, 2002.
  • Press, William H.; Teukolsky, Saul A.; Vetterling, William T.; and Flannery, Brian P.; Numerical Recipes in Fortran 77, 2nd ed., Chap. 20.2, pp. 881–886
  • Forsythe, George E.; Malcolm, Michael A.; Moler, Cleve B.; "Computer Methods for Mathematical Computations", Prentice-Hall, ISBN 0-13-165332-6, 1977

Spoljašnje veze[уреди | уреди извор]

  • MACHAR , rutina ( u C i Fortranu) da bi se "dinamično izračunale mašinske konstante" (ACM algoritam 722)