Машински Епсилон

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

Машински Епсилон даје горњу границу релативне грешке због заокруживања аритметике плутајућих тачака.Ова вредност карактерише рачунарску аритметику у пољу бројчане анализе,а продужава се у предмету рачунарске науке.Количина се такође назива и "мацхепс" или јединица заокруживања,а означава се Грчким симболом Епсилон ε или Романским словом у.

Вредности за стандардну хардверску аритметику са плутајућим тачкама[уреди | уреди извор]

Дате вредности машинског епсилона важе за стандарде формата плутајућих тачака:

ИЕЕЕ 754 - 2008 Уобичајно име C++ тип податка База Прецизност Машински епсилон [а] Машински епсилон [б]
бинарy16 полу прецизан схорт 2 11 (један бит је имплицитан) 2−11 ≈ 4.88е-04 2−10 ≈ 9.77е-04
бинарy32 прецизан флоат 2 24 (један бит је имплицитан) 2−24 ≈ 5.96е-08 2−23 ≈ 1.19е-07
бинарy64 дупло прецизан доубле 2 53 (један бит је имплицитан) 2−53 ≈ 1.11е-16 2−52 ≈ 2.22е-16
продужено прецизан _флоат80 [1] 2 64 2−64 ≈ 5.42е-20 2−63 ≈ 1.08е-19
бинарy128 четвороструко прецизан _флоат128 2 113 (један бит је имплицитан) 2−113 ≈ 9.63е-35 2−112 ≈ 1.93е-34
децимал32 прецизна децимала _Децимал32 [2] 10 7 5 × 10−7 10−6
децимал64 дупло прецизна децимала _Децимал64 10 16 5 × 10−16 10−15
децимал128 четвороструко прецизна децимала _Децимал128 10 34 5 × 10−34 10−33
  1. ^ Према Проф. Деммел, ЛАПАЦК, Сцилаб
  2. ^ Према Проф. Хигхам; ИСО C стандард; C, C++ и Пyтхон језичке константе; Матхематица, МАТЛАБ и Оцтаве; разне свеске - погледајте доле за другу дефиницију

Формална дефиниција[уреди | уреди извор]

Заокруживање је поступак одабира представљајућег реалног броја у систему са плутајућим тачкама.За бројни систем и процедуру заокруживања , машина епсилон представља максималну релативну грешку од изабране процедуре заокруживања.

Одређено претходно израчунавање је потребно да би се одредила вредност из ове дефиниције.Систем плутајућих бројева је карактеризован радиксом који се другачије назива и база ,прецизношћу , тј. број радикс цифара сигнифицанда (укључујући било који водећи имплицитни број).Сви бројеви са истим степеном, ,имају размак .Размак се мења на бројевима који су савршеног степена од ; размак са стране веће величине је за пута већи од размака са стране мање величине.

Пошто је машински епсилон везан за релативну грешку , довољно је узети у обзир бројеве са експонентом .Такође је довољно размотрити и позитивне бројеве.За уобичајену врсту заокруживања на најближи број , апсолутна грешка заокруживања је већа половина размака или .Ова вредност је највећи могући бројилац релативне грешке.Именилац у релативној грешци је број који се заокружује , који би требао да је што могуће мањи да би релативна грешка била већа.Стога , најгора релативна грешка се дешава када се заокруживање примењује на бројеве обрасца где је између и .Сви ови бројеви се заокругљују на са релативном грешком .Максимум се јавља када је на горњем крају свог опсега. је у имениоцу занемарљив са бројиоцем , тако да се не користи за пробитачност и само се узима као машински епсилон.Као што је приказано овде , релативна грешка је најгора за бројеве који се заокружују на , тако да се машински епсилон такође назива заокругљивач јединица , што значи "максимална грешка која се може појавити при заокруживању до вредности јединице".Дакле , максималан размак између нормализованог броја плутајуће тачке , , и суседног нормализованог броја је x . [3]

Аритметички модел[уреди | уреди извор]

Бројчана анализа користи машински епсилон за истраживање ефеката грешака током заокруживања.Стварне грешке машинске аритметике су сувише компликоване да би се директно проучавале , па се због тога користи следећи једноставни модел.ИЕЕЕ Аритметички стандард налаже да су све операције са плутајућим тачкама извршене као да је могуће одрадити бесконачно-прецизну операцију , а затим је број заокружен на број са плутајућим тачкама.Претпоставимо да су (1) и бројеви са плутајућим тачкама , да је (2) аритметичка операција бројева са плутајућим тачкама , као што је дељење или множење и (3) бесконачно-прецизна операција.Према стандарду , рачунар израчунава:

Према значењу машинског епсилона , релативан грешка заокруживања је већина машинског епсилона по величини , тако да:

где је у апсолутној магнитуди највише или у.Књиге Деммела и Хигхама у референцама се могу консултовати како би се видело како се овај модел користи за анализу грешака , рецимо , Гауссове елиминације.

Варијанте дефиниције[уреди | уреди извор]

ИЕЕЕ стандард не дефинише  појмове машинског епсилона и јединице заокруживања, тако да се користе различите дефиниције ових термина, што може довести до забуне.

Дефиниција која је овде дата за машински епсилон је она коју користи професор Џејмс Димел у сценарију предавања [4] , његов ЛАПАЦК линеарни алгебра покрет [5], нумерички истраживачки радови [6] и неки научни рачунарски софтвери [7]. Већина нумеричких аналитичара употребљава речи машински епсилон и јединица заокруживања са тим значењем.

Следећа различита дефиниција је много шире распрострањена изван академије: Машински епсилон је дефинисан као најмањи број, када се дода једном, даје резултад другачији од једног. По овој дефиницији , једнак је вредности јединице на последњем месту у односу на 1, тј. [8] и за процедуру заокруживања од круга до најближе, у .Преваленца ове дефиниције коришћена је у његовој употреби у ИСОЦ стандарду за константне везане за типове са плутајућим тачкама [9] [10] и одговарајуће константне у другим програмским језицима .[11] [12] Такође се широко користи у научном рачунарском софтверу [13] [14] [15] у нумеричкој и рачунарској литератури [16] [17] [18] [19] и другим академским ресурсима.[20] [21]

Како одредити машински епсилон[уреди | уреди извор]

Где стандарди библиотеке не пружају предрачунате вредности (као што је <плутајуће.х> ради са ФЛТ_ЕПСИЛОН,ДБЛ_ЕПСИЛОН и ЛДБЛ_ЕПСИЛОН за C и<ограничења>ради са стандардом : нумеричко_ограничење<Т>:епсилон ()у C++), најбољи начин за одређивање машинског епсилона је да се односи на табелу,горе, и користи одговарајућа формула. Рачунарски машински епсилон се често даје као вежба уџбеницима. Следећи примери израчунавања машинског епсилона у смислу размака бројева са плутајућим тачкама на 1, а не у смислу јединице заокруживања.

Имајте на уму да резултати замисе од одређеног формата са плутајућим тачкама, као што су плутајуће,дупле,дупле дуплеи или слично као што су подржане од стране програмског језика, преводиоца и библиотеке истраживања за стварну платформу.

Неки формати које подржава процесор можда не подржава изабрани преводилац и оперативни систем. Други формати могу имитирати изврсавање библиотеке, укључујући и произвољне аритметички доступне на неким језицима и библиотекама.

У стриктном смислу појам машински епсилон значи тачност 1+епс директно подржана од стране процесора (или копроцесора), не неких 1+епс  прецизности које подржава одеђени преводилац за одређени оперативни систем, оцим ако није познато да користи најбољи формат.

Облици ИЕЕЕ 754 са плутајућим тачкама имају својство које, када се реинтерпретирају два комплементарна цела броја исте ширине , монотонично се повећава преко позитивних вредности и монотонично смањује негативне вредности (погледајте бинарно прдстављање 32-битних пловака). Такође имају својство да 0 < |ф(x)| < ∞, анд |ф(x+1) − ф(x)| ≥ |ф(x) − ф(x−1)|(где је ф(x) раније поменути цео број реинтерпретације x). На језицима који омогућавају тип пуњења  и увек користе ИЕЕЕ 754-1985, можемо то искористити за израчунавање машинског епсилона у константном бремену. На пример, у 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;
}

Ово ће дати резултат истог знака као и вредност. Ако је позитиван резултат увек пожељан, повратан изказ машинског епсилона се може заменити са:

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

64-битни дупли дају 2,220446е-16, што је 2-52 као што се очекивало.

Приближност[уреди | уреди извор]

Следећи једноставни алгоритам мпже се користити за приближност машинског епсилона у оквиру фактора од два(један ред величине)његове истакнуте вредности, користећи линеарну претрагу:

epsilon = 1.0; 

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

Такође погледај и[уреди | уреди извор]

  • Флоатинг поинт (плутајућа тачка), општа дискусија о тачности проблема у аритметици са плутајућим тачкама.

Референце[уреди | уреди извор]

  1. ^ "Флоатинг Тyпес - Усинг тхе ГНУ Цомпилер Цоллецтион (ГЦЦ)"
  2. ^ "Децимал Флоат - Усинг тхе ГНУ Цомпилер Цоллецтион (ГЦЦ)"
  3. ^ Хигхам, Ницхолас (2002). Аццурацy анд Стабилитy оф Нумерицал Алгоритхмс (2 ед). СИАМ. п. 37.
  4. ^ "Басиц Иссуес ин Флоатинг Поинт Аритхметиц анд Еррор Аналyсис" 21.10.1999. Враћено 11.4.2013.
  5. ^ "ЛАПАЦК Усерс' Гуиде Тхирд Едитион." 22 Аугуст 1999. Ретриевед 9 Марцх 2012.
  6. ^ "Давид Голдберг: Wхат Еверy Цомпутер Сциентист Схоулд Кноw Абоут Флоатинг-Поинт Аритхметиц, АЦМ Цомпутинг Сурвеyс, Вол 23, Но 1, Марцх 1991" Архивирано на сајту Wayback Machine (1. новембар 2016)(ПДФ). Ретриевед 11 Апр 2013.
  7. ^ "Сцилаб доцументатион - нумбер_пропертиес - детермине флоатинг-поинт параметерс"Ретриевед 11 Апр 2013.
  8. ^ Приметимо да је овде П дефинисано као прецизност , тј. као укупан број битова у Сигнифицанд-у укључујући имплицитни главни бит, који се користи у горњој табели
  9. ^ Јонес, Дерек M. (2009). " Тхе Неw C Стандард - Ан Ецономиц анд Цултурал Цомментарy" (ПДФ). п. 377.
  10. ^ "флоат.х референца на цплусплус.цом" Ретриевед 11 Апр 2013.
  11. ^ "стд::нумериц_лимитс референца на цплусплус.цом" Ретриевед 11 Апр 2013.
  12. ^ "Пyтхон доцументатион - Сyстем-специфиц параметерс анд фунцтионс" Ретриевед 11 Апр 2013.
  13. ^ "Матхематица доцументатион: $МацхинеЕпсилон"Ретриевед 11 Апр 2013.
  14. ^ "Матлаб доцументатион - епс - Флоатинг-поинт релативе аццурацy"Архивиран из "оригинала" 2013-08-07. Ретриевед 11 Апр 2013.
  15. ^ "Оцтаве доцументатион - епс фунцтион" Ретриевед 11 Апр 2013.
  16. ^ Хигхам, Ницхолас (2002). Прецизност и стабилност Нумеричких Алгоритама (2 ед). СИАМ. пп. 27–28.
  17. ^ Qуартерони, Алфио; Саццо, Риццардо; Салери, Фаусто (2000)"Нумерицал Матхематицс" Архивирано на сајту Wayback Machine (14. новембар 2017) (ПДФ). Спрингер. п. 49. "ИСБН""0-387-98959-5"
  18. ^ Пресс, Wиллиам Х.; Теуколскy, Саул А.; Веттерлинг, Wиллиам Т.; Фланнерy, Бриан П. Нумерички рецепти. п. 890.
  19. ^ Енгелн-Мüллгес, Гисела; Реуттер, Фритз (1996). Нумерик-Алгоритхмен. п."ИСБН""3-18-401539-4."
  20. ^ "Роберт M. Цорлесс: Тхе Мацхине Епсилон"28 Јун 2005. Ретриевед 11 Апр 2013.
  21. ^ "МЦС 471 Цомпутер Проблем 1"2004. Ретриевед 11 Апр 2013.
  • Андерсон, Е.; ЛАПАЦК Усерс' Гуиде, Социетy фор Индустриал анд Апплиед Матхематицс (СИАМ), Пхиладелпхиа, ПА, тхирд едитион, 1999.
  • Цодy, Wиллиам Ј.; МАЦХАР: А Соуброутине то Дyнамицаллy Детермине Мацхине Параметерс, АЦМ Трансацтионс он Матхематицал Софтwаре, Вол. 14(4), 1988, 303-311.
  • Бессет, Дидиер Х.; Објецт-Ориентед Имплементатион оф Нумерицал Метходс, Морган & Кауфманн, Сан Францисцо, ЦА, 2000.
  • Деммел, Јамес W., Апплиед Нумерицал Линеар Алгебра, Социетy фор Индустриал анд Апплиед Матхематицс (СИАМ), Пхиладелпхиа, ПА, 1997.
  • Хигхам, Ницхолас Ј.; Аццурацy анд Стабилитy оф Нумерицал Алгоритхмс, Социетy фор Индустриал анд Апплиед Матхематицс (СИАМ), Пхиладелпхиа, ПА, сецонд едитион, 2002.
  • Пресс, Wиллиам Х.; Теуколскy, Саул А.; Веттерлинг, Wиллиам Т.; анд Фланнерy, Бриан П.; Нумерицал Реципес ин Фортран 77, 2нд ед., Цхап. 20.2, пп. 881–886
  • Форсyтхе, Георге Е.; Малцолм, Мицхаел А.; Молер, Цлеве Б.; "Цомпутер Метходс фор Матхематицал Цомпутатионс", Прентице-Халл, ISBN 0-13-165332-6, 1977

Спољашње везе[уреди | уреди извор]

  • МАЦХАР , рутина ( у C и Фортрану) да би се "динамично израчунале машинске константе" (АЦМ алгоритам 722)