Аритметика са покретним зарезом

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу

У рачунарству, аритметика са покретним зарезом је аритметика помоћу формулачке репрезентације реалних бројева као приближна вредност, како би се подржао размак између опсега и прецизности. Из тог разлога, израчунавање са плутајућим тачкама се често налази у системима који укључују врло мале и веома велике реалне бројеве, који захтевају брзу обраду. Један број је уопштено представљен приближно фиксном броју значајних цифара (сигнификантан) и скалиран коришћењем експонента у некој фиксној бази; основа за скалирање је обично два, десет или шеснаест. Број који се може представити тачно је у следећем облику:

значајна вредност x основа

где је значајна вредност цео број (тј., у скупу ), база је цео број већи или једнак броју 2, а експонент је такође цели број. На пример:

Термин са покретним зарезом се односи на чињеницу да тачка радикуса (децимална тачка, или, најчешће у рачунарима, бинарна тачка) се може "кретати"; то јест, може се поставити било гдје у односу на значајне цифре броја. Ова позиција је означена као компонента експонента, па се представљање са плутајућим тачкама може сматрати неком врстом научне нотације. Систем са плутајућим тачкама се може користити да са фиксним бројем цифара представља бројеве различитих редова величине: нпр. растојање између галаксија или пречника атомског језгра може се изразити са истом јединицом дужине. Резултат овог динамичког опсега је тај што бројеви који се могу представити нису равномерно распоређени; разлика између два узастопна репрезентативног броја расте са изабраном скалом. Током година, у рачунарима су коришћене различите представке са плутајућим тачкама. Међутим, од деведесетих година, најчешће се појављује представљање које дефинише сттандард IEEE 754. Брзина операција са покретним зарезом, обично мерена у смислу ФЛОПС, је важна карактеристика рачунарског система, посебно за апликације које укључују интензивне математичке прорачуне. Јединица за рад за покретним зарезом (ФПУ, колоквијално математички копроцесор) је део рачунарског система специјалнопројектован за обављање операција на бројевима са покретним зарезом.

Бројеви плутајућих-тачака[уреди]

Број приказа одређује неки начин кодирања броја, обично као низ цифара. Постоји неколико механизама помоћу којих низови цифара могу да представљају бројеве. Ако тачка радика није специфицирана, тада низ имплицитно представља цео број, а неказана тачка радика би била с десне стране низа, поред најмање значајне цифре. У системима са фиксним тачкама, позиција у низу је специфицирана за тачку радикуса. Дакле, шема са фиксним тачкама може бити да се користи низ од 8 децималних цифара са децималном тачком у средини, при чему "00012345" представља 0001.2345.

У научним нотацијама, дати број је скалиран снагом од 10, тако да се налази унутар одређеног распона - обично између 1 и 10, са тачком радика која се појављује одмах након прве цифре. Фактор скалирања, као снага од десет, се затим приказује одвојено на крају броја. На пример, орбитални период Јупитеровог месеца  је 152.853,5047 секунде, вредност која би била представљена у стандардном облику научног записа као 1.528535047 × 105 секунди.

Алтернативе бројева са плутајућим тачкама[уреди]

Представљање плутајућих тачака је далеко најчешћи начин представљања у рачунарима апроксимације реалних бројева. Међутим, постоје алтернативе:

  • Представљање фиксних тачака користи целокупне хардверске операције контролисане имплементацијом софтвера одређене конвенције о локацији бинарне или децималне тачке, на пример, 6 бита или цифара са десне стране.Хардвер који манипулише овим представама је јефтинији од плутајуће тачке и може се користити за обављање нормалних целих операција.Бинарна фиксна тачка се обично користи у апликацијама специјалне намене за уграђене процесоре који могу радити само целу аритметику, али децимална фиксна тачка је уобичајна у комерцијалним апликацијама.
  •  Бинарно-кодирани децимални код (БЦД) је кодирање за децималне бројеве у којима је свака цифра представљена сопственим бинарним низом. Могуће је извршити систем са плутајућим тачкама са БЦД кодирањем.
  • Системи логаритамског броја представља стварни број логаритмом његове апсолутне вредности и битног знака. Расподела вредности је слична плутајућој тачки, али крива вредности-репрезентације (тј., Граф логаритамске функције) је глатка (осим у 0). Насупрот томе, аритметика са плутајућим тачкама, у множењу система логаритамског броја, дељење и експонентиација се једноставно имплементирају, али додавање и одузимање су комплексне Аритметика индекса нивоа Цленсхав, Олвер и Турнер је шема заснована на генерализованој логаритамској репрезентацији. 
  • Тамо где је пожељна већа прецизност, аритметика са плутајућим тачкама се може имплементирати (обично у софтверу) с сигнификантима променљиве дужине (а понекад и експонентима) величине у зависности од стварне потребе и овисно о томе како се рачун наставља. Ово се зове произвољна  прецизност аритметике са плутајућим тачкама.
  •  Неки бројеви (нпр. 1/3 и 1/10) не могу бити представљени тачно у бинарном плутајућем месту, без обзира на то што је прецизност тачна.Софтверски пакети који врше рационалну аритметику представљају бројеве као фракције са интегралним нумератором и именитељем и стога могу тачно да представљају било који рационални број. Такви пакети обично требају користити "бигнум" аритметику за појединачне целе бројеве.
  • Компјутерски алгебра системи као што су Матхематица, Макима и Мапле често могу да се баве нерационалним бројевима као 'π' или  корен из 3 у потпуно "формалном" без обзира на специфично кодирање значења.  Такав програм може да оцени изразе попут ,син3,управо зато што је програмиран да директно обрађује математичку математику уместо да користи приближне вредности за сваки средњи прорачун.

Историја[уреди]

Године 1914. Леонардо Торрес и Куеведо је дизајнирао електромеханичку верзију аналитичког мотора Чарлса Баббагеа и укључио аритметику са плутајућим тачкама.

Године 1938. Конрад Зусе из Берлина завршио је з1, први бинарни, програмабилни механички компјутер; користи 24-битну бинарну представу бројева са плутајућим тачкама са 7-битним потписаним експонентом, 17-битним значењем (укључујући један имплицитни бит) и битним знаком.

Поузданији релејни з3, завршен 1941. године, има репрезентације и за позитивне и негативне бесконачности; нарочито, она имплементира дефинисане операције са бесконачно, као што је 1/бесконачно и зауставља се на недефинисаним операцијама,0хбесконачно.Зусе је такође предложио, али није завршио, пажљиво заокружену аритметику са плутајућим тачкама која укључује +- бесконачно и НаН репрезентације, предвиђајући функције ИЕЕЕ Стандарда за четири деценије. Први комерцијални рачунар са хардвером са плутајућом тачком био је Зусеов рачунар з4, дизајниран 1942-1945. Године 1946. Белл Лабораториес је представио Марк В, који је имплементирао децималне бројеве са плутајућим тачкама.

Распон бројева са плутајућим тачкама[уреди]

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

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

На типичном рачунарском систему, број двоструке прецизности (64-битни) бинарног плутајућег броја има коефицијент од 53 бита (од којих један имплицира), експонента од 11 битова и један знакски бит. Позитивни бројеви са плутајућим тачкама у овом формату имају приближни опсег од 10-308 до 10308, јер је опсег експонента [-1022,1023], а 308 је приближно лог10 (21023). Комплетни опсег формата је од око -10308 до +10308 (види ИЕЕЕ 754). 

 Број нормализованих бројева са плутајућим тачкама у систему (Б, П, Л, У) где је:

  •  Б је основа система
  •  П је прецизност система за П бројеве
  •  Л је најмањи експонент који се може представити у систему
  • и У је највећи експонент који се користи у систему. 

Постоји најмањи позитиван нормализовани број са плутајућим тачкама, ниво Ундерфлов = УФЛ=B који има 1 као прву цифру и 0 за преостале цифре сигнификантне, а најмања могућа вредност за експонента.

Постоји највећи број са плутајућим бројем,ниво Оверфлов = ОФЛ =(1-Б)(Б ) који има Б-1 као вредност за сваку цифру значајне и највеће могуће вредности за експоненте.

Поред тога, постоје репрезентативне вредности стриктно између -УФЛ и УФЛ. Наиме, позитивне и негативне нуле, као и денормализовани бројеви.

Посебне вредности[уреди]

Писање нуле[уреди]

У IEEE 754 стандарду, нула је потписана, што значи да постоје и "позитивна нула" (+0) и "негативна нула" (-0). У већини радних временских окружења, позитивна нула се обично штампа као "0", а негативна нула као "-0". Ове вредности се понашају једнако у нумеричким упоређењима, али неке операције враћају различите резултате за +0 и -0. На пример, 1 / (- 0) враћа негативну бесконачност, док 1 / + 0 враћа позитивну бесконачност (тако да се одржава идентитет 1 / (1 / ± ∞) = ± ∞). Друге уобичајене функције са дисконтинуитетом[1] у x = 0 које могу третирати +0 и -0 различито укључују log (x), signum (x) и главни квадратни корен од и + xи за било који негативни број и. Као и са било којом шемом апроксимације, операције које укључују "негативну нулу" могу повремено узроковати конфузију. На пример, у IEEE 754, x = и не значи увек 1 / x = 1 / и, као 0 = -0 али 1/0 = 1 / -0.[2]

Субнормални бројеви[уреди]

Главни чланак: Субнормални бројеви

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

Савремени хардвер са децималним бројевима обично рукује поднормалним вредностима (као и нормалним вредностима) и не захтева софтверску емулацију за поднормале.

Бесконачности[уреди]

Бесконачности проширене линије стварног броја могу бити представљене у ИЕЕЕ типовима података са плутајућим тачкама,баш као и обичне вредности са плутајућим вредностима као што су 1, 1.5, итд. Они нису вредности грешке на било који начин,мада се често (али не увек, јер зависи од заокруживања) користе као заменске вредности када постоји прелив.По изузетку са поделом по нули,позитивна или негативна бесконачност се враћа као тачан резултат.Бесконачност се такође може увести као број (попут Ц-с "бесконачност" макроа, или "∞" ако програмски језик дозвољава ту синтаксу). ИЕЕЕ 754 захтева да се бесконачно поступа на разумни начин,као што је

  • (+∞) + (+7) = (+∞)
  • (+∞) × (−2) = (−∞)
  • (+∞) × 0 = NaN – нема смисла да се то ради

НаНс[уреди]

ИЕЕЕ 754 специфицира посебну вредност под називом "Није број" (НаН)[3] која се враћа као резултат неких "неважећих" операција, као што су 0/0, ∞ × 0 или скрт (-1). Уопштено гледано, НаН-ови ће бити пропагирани, тј. Већина операција које укључују НаН ће резултирати са НаН-ом, иако ће функције које би дале неки дефинирани резултат за било коју вредност са плутајуће тачкаma то учиниле и за НаН, нпр. НаН ^ 0 = 1. су две врсте НаНс: подразумевани тихи НаН и, опционо, сигнализирају НаНс. Сигнализација НаН у било којој аритметичкој операцији (укључујући нумеричка упоређивања) узрокује сигнализирање "неважећег" изузетка .

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

Референце[уреди]

  1. ^ Harper, J.F. (2016), "Defining continuity of real functions of real variables", BSHM Bulletin: Journal of the British Society for the History of Mathematics: 1–16,doi:10.1080/17498430.2015.1116053
  2. ^ Iserles, A.; Powell, M. J. D. (01. 01. 1987). „on The state of the art in numerical analysis”. Oxford University Press, Inc. ISBN 978-0-19-853614-7. 
  3. ^ P., Bowman, Kenneth (2006). An introduction to programming with IDL : Interactive Data Language. Amsterdam: Elsevier Academic Press. ISBN 9780120885596. OCLC 162570220.