Aritmetika sa pokretnim zarezom

S Vikipedije, slobodne enciklopedije

U računarstvu, aritmetika sa pokretnim zarezom je aritmetika pomoću formulačke reprezentacije realnih brojeva kao približna vrednost, kako bi se podržao razmak između opsega i preciznosti. Iz tog razloga, izračunavanje sa plutajućim tačkama se često nalazi u sistemima koji uključuju vrlo male i veoma velike realne brojeve, koji zahtevaju brzu obradu. Jedan broj je uopšteno predstavljen približno fiksnom broju značajnih cifara (signifikantan) i skaliran korišćenjem eksponenta u nekoj fiksnoj bazi; osnova za skaliranje je obično dva, deset ili šesnaest. Broj koji se može predstaviti tačno je u sledećem obliku:

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

gde je značajna vrednost ceo broj (tj., u skupu ), baza je ceo broj veći ili jednak broju 2, a eksponent je takođe celi broj. Na primer:

Termin sa pokretnim zarezom se odnosi na činjenicu da tačka radikusa (decimalna tačka, ili, najčešće u računarima, binarna tačka) se može "kretati"; to jest, može se postaviti bilo gdje u odnosu na značajne cifre broja. Ova pozicija je označena kao komponenta eksponenta, pa se predstavljanje sa plutajućim tačkama može smatrati nekom vrstom naučne notacije. Sistem sa plutajućim tačkama se može koristiti da sa fiksnim brojem cifara predstavlja brojeve različitih redova veličine: npr. rastojanje između galaksija ili prečnika atomskog jezgra može se izraziti sa istom jedinicom dužine. Rezultat ovog dinamičkog opsega je taj što brojevi koji se mogu predstaviti nisu ravnomerno raspoređeni; razlika između dva uzastopna reprezentativnog broja raste sa izabranom skalom. Tokom godina, u računarima su korišćene različite predstavke sa plutajućim tačkama. Međutim, od devedesetih godina, najčešće se pojavljuje predstavljanje koje definiše sttandard IEEE 754. Brzina operacija sa pokretnim zarezom, obično merena u smislu FLOPS, je važna karakteristika računarskog sistema, posebno za aplikacije koje uključuju intenzivne matematičke proračune. Jedinica za rad za pokretnim zarezom (FPU, kolokvijalno matematički koprocesor) je deo računarskog sistema specijalnoprojektovan za obavljanje operacija na brojevima sa pokretnim zarezom.

Brojevi plutajućih-tačaka[uredi | uredi izvor]

Broj prikaza određuje neki način kodiranja broja, obično kao niz cifara. Postoji nekoliko mehanizama pomoću kojih nizovi cifara mogu da predstavljaju brojeve. Ako tačka radika nije specificirana, tada niz implicitno predstavlja ceo broj, a nekazana tačka radika bi bila s desne strane niza, pored najmanje značajne cifre. U sistemima sa fiksnim tačkama, pozicija u nizu je specificirana za tačku radikusa. Dakle, šema sa fiksnim tačkama može biti da se koristi niz od 8 decimalnih cifara sa decimalnom tačkom u sredini, pri čemu "00012345" predstavlja 0001.2345.

U naučnim notacijama, dati broj je skaliran snagom od 10, tako da se nalazi unutar određenog raspona - obično između 1 i 10, sa tačkom radika koja se pojavljuje odmah nakon prve cifre. Faktor skaliranja, kao snaga od deset, se zatim prikazuje odvojeno na kraju broja. Na primer, orbitalni period Jupiterovog meseca  je 152.853,5047 sekunde, vrednost koja bi bila predstavljena u standardnom obliku naučnog zapisa kao 1.528535047 × 105 sekundi.

Alternative brojeva sa plutajućim tačkama[uredi | uredi izvor]

Predstavljanje plutajućih tačaka je daleko najčešći način predstavljanja u računarima aproksimacije realnih brojeva. Međutim, postoje alternative:

  • Predstavljanje fiksnih tačaka koristi celokupne hardverske operacije kontrolisane implementacijom softvera određene konvencije o lokaciji binarne ili decimalne tačke, na primer, 6 bita ili cifara sa desne strane.Hardver koji manipuliše ovim predstavama je jeftiniji od plutajuće tačke i može se koristiti za obavljanje normalnih celih operacija.Binarna fiksna tačka se obično koristi u aplikacijama specijalne namene za ugrađene procesore koji mogu raditi samo celu aritmetiku, ali decimalna fiksna tačka je uobičajna u komercijalnim aplikacijama.
  •  Binarno-kodirani decimalni kod (BCD) je kodiranje za decimalne brojeve u kojima je svaka cifra predstavljena sopstvenim binarnim nizom. Moguće je izvršiti sistem sa plutajućim tačkama sa BCD kodiranjem.
  • Sistemi logaritamskog broja predstavlja stvarni broj logaritmom njegove apsolutne vrednosti i bitnog znaka. Raspodela vrednosti je slična plutajućoj tački, ali kriva vrednosti-reprezentacije (tj., Graf logaritamske funkcije) je glatka (osim u 0). Nasuprot tome, aritmetika sa plutajućim tačkama, u množenju sistema logaritamskog broja, deljenje i eksponentiacija se jednostavno implementiraju, ali dodavanje i oduzimanje su kompleksne Aritmetika indeksa nivoa Clenshav, Olver i Turner je šema zasnovana na generalizovanoj logaritamskoj reprezentaciji. 
  • Tamo gde je poželjna veća preciznost, aritmetika sa plutajućim tačkama se može implementirati (obično u softveru) s signifikantima promenljive dužine (a ponekad i eksponentima) veličine u zavisnosti od stvarne potrebe i ovisno o tome kako se račun nastavlja. Ovo se zove proizvoljna  preciznost aritmetike sa plutajućim tačkama.
  •  Neki brojevi (npr. 1/3 i 1/10) ne mogu biti predstavljeni tačno u binarnom plutajućem mestu, bez obzira na to što je preciznost tačna.Softverski paketi koji vrše racionalnu aritmetiku predstavljaju brojeve kao frakcije sa integralnim numeratorom i imeniteljem i stoga mogu tačno da predstavljaju bilo koji racionalni broj. Takvi paketi obično trebaju koristiti "bignum" aritmetiku za pojedinačne cele brojeve.
  • Kompjuterski algebra sistemi kao što su Mathematica, Makima i Maple često mogu da se bave neracionalnim brojevima kao 'π' ili  koren iz 3 u potpuno "formalnom" bez obzira na specifično kodiranje značenja.  Takav program može da oceni izraze poput, sin3, upravo zato što je programiran da direktno obrađuje matematičku matematiku umesto da koristi približne vrednosti za svaki srednji proračun.

Istorija[uredi | uredi izvor]

Godine 1914. Leonardo Torres i Kuevedo je dizajnirao elektromehaničku verziju analitičkog motora Čarlsa Babbagea i uključio aritmetiku sa plutajućim tačkama.

Godine 1938. Konrad Zuse iz Berlina završio je z1, prvi binarni, programabilni mehanički kompjuter; koristi 24-bitnu binarnu predstavu brojeva sa plutajućim tačkama sa 7-bitnim potpisanim eksponentom, 17-bitnim značenjem (uključujući jedan implicitni bit) i bitnim znakom.

Pouzdaniji relejni z3, završen 1941. godine, ima reprezentacije i za pozitivne i negativne beskonačnosti; naročito, ona implementira definisane operacije sa beskonačno, kao što je 1/beskonačno i zaustavlja se na nedefinisanim operacijama,0hbeskonačno.Zuse je takođe predložio, ali nije završio, pažljivo zaokruženu aritmetiku sa plutajućim tačkama koja uključuje +- beskonačno i NaN reprezentacije, predviđajući funkcije IEEE Standarda za četiri decenije. Prvi komercijalni računar sa hardverom sa plutajućom tačkom bio je Zuseov računar z4, dizajniran 1942-1945. Godine 1946. Bell Laboratories je predstavio Mark V, koji je implementirao decimalne brojeve sa plutajućim tačkama.

Raspon brojeva sa plutajućim tačkama[uredi | uredi izvor]

Broj plutajuće tačke sastoji se od dvije komponente fiksne tačke, čiji opseg zavisi isključivo od broja bitova ili cifara u njihovom predstavljanju.

Dok komponente linearno zavise od njihovog opsega, opseg sa plutajućim tačkama linearno zavisi od značajnog opsega i eksponencijalno na opsegu komponenti eksponenta, što daje izuzetno širi opseg broju.

Na tipičnom računarskom sistemu, broj dvostruke preciznosti (64-bitni) binarnog plutajućeg broja ima koeficijent od 53 bita (od kojih jedan implicira), eksponenta od 11 bitova i jedan znakski bit. Pozitivni brojevi sa plutajućim tačkama u ovom formatu imaju približni opseg od 10-308 do 10308, jer je opseg eksponenta [-1022,1023], a 308 je približno log10 (21023). Kompletni opseg formata je od oko -10308 do +10308 (vidi IEEE 754). 

 Broj normalizovanih brojeva sa plutajućim tačkama u sistemu (B, P, L, U) gde je:

  •  B je osnova sistema
  •  P je preciznost sistema za P brojeve
  •  L je najmanji eksponent koji se može predstaviti u sistemu
  • i U je najveći eksponent koji se koristi u sistemu. 

Postoji najmanji pozitivan normalizovani broj sa plutajućim tačkama, nivo Underflov = UFL=B koji ima 1 kao prvu cifru i 0 za preostale cifre signifikantne, a najmanja moguća vrednost za eksponenta.

Postoji najveći broj sa plutajućim brojem, nivo Overflov = OFL =(1-B)(B ) koji ima B-1 kao vrednost za svaku cifru značajne i najveće moguće vrednosti za eksponente.

Pored toga, postoje reprezentativne vrednosti striktno između -UFL i UFL. Naime, pozitivne i negativne nule, kao i denormalizovani brojevi.

Posebne vrednosti[uredi | uredi izvor]

Pisanje nule[uredi | uredi izvor]

U IEEE 754 standardu, nula je potpisana, što znači da postoje i "pozitivna nula" (+0) i "negativna nula" (-0). U većini radnih vremenskih okruženja, pozitivna nula se obično štampa kao "0", a negativna nula kao "-0". Ove vrednosti se ponašaju jednako u numeričkim upoređenjima, ali neke operacije vraćaju različite rezultate za +0 i -0. Na primer, 1 / (- 0) vraća negativnu beskonačnost, dok 1 / + 0 vraća pozitivnu beskonačnost (tako da se održava identitet 1 / (1 / ± ∞) = ± ∞). Druge uobičajene funkcije sa diskontinuitetom[1] u x = 0 koje mogu tretirati +0 i -0 različito uključuju log (x), signum (x) i glavni kvadratni koren od i + xi za bilo koji negativni broj i. Kao i sa bilo kojom šemom aproksimacije, operacije koje uključuju "negativnu nulu" mogu povremeno uzrokovati konfuziju. Na primer, u IEEE 754, x = i ne znači uvek 1 / x = 1 / i, kao 0 = -0 ali 1/0 = 1 / -0.[2]

Subnormalni brojevi[uredi | uredi izvor]

Glavni članak: Subnormalni brojevi

Subnormalne vrednosti popunjavaju prazninu u praznom hodu sa vrednostima gde je apsolutna rastojanje između njih jednako kao i za susedne vrednosti koje se nalaze izvan mlazne granice. Ovo je poboljšanje u odnosu na stariju praksu da samo ima nulu u praznom jazu, a gdje su rezultati podnošenja zamenjeni nulom (flush to zero).

Savremeni hardver sa decimalnim brojevima obično rukuje podnormalnim vrednostima (kao i normalnim vrednostima) i ne zahteva softversku emulaciju za podnormale.

Beskonačnosti[uredi | uredi izvor]

Beskonačnosti proširene linije stvarnog broja mogu biti predstavljene u IEEE tipovima podataka sa plutajućim tačkama, baš kao i obične vrednosti sa plutajućim vrednostima kao što su 1, 1.5, itd. Oni nisu vrednosti greške na bilo koji način, mada se često (ali ne uvek, jer zavisi od zaokruživanja) koriste kao zamenske vrednosti kada postoji preliv.Po izuzetku sa podelom po nuli, pozitivna ili negativna beskonačnost se vraća kao tačan rezultat.Beskonačnost se takođe može uvesti kao broj (poput C-s "beskonačnost" makroa, ili "∞" ako programski jezik dozvoljava tu sintaksu). IEEE 754 zahteva da se beskonačno postupa na razumni način, kao što je

  • (+∞) + (+7) = (+∞)
  • (+∞) × (−2) = (−∞)
  • (+∞) × 0 = NaN – nema smisla da se to radi

NaNs[uredi | uredi izvor]

IEEE 754 specificira posebnu vrednost pod nazivom "Nije broj" (NaN)[3] koja se vraća kao rezultat nekih "nevažećih" operacija, kao što su 0/0, ∞ × 0 ili skrt (-1). Uopšteno gledano, NaN-ovi će biti propagirani, tj. Većina operacija koje uključuju NaN će rezultirati sa NaN-om, iako će funkcije koje bi dale neki definirani rezultat za bilo koju vrednost sa plutajuće tačkama to učinile i za NaN, npr. NaN ^ 0 = 1. su dve vrste NaNs: podrazumevani tihi NaN i, opciono, signaliziraju NaNs. Signalizacija NaN u bilo kojoj aritmetičkoj operaciji (uključujući numerička upoređivanja) uzrokuje signaliziranje "nevažećeg" izuzetka .

Zastupljenost NaN-ova određeni standardom ima neotkrivene bitove koji se mogu koristiti za kodiranje tipa ili izvora greške; ali nema standarda za to kodiranje. U teoriji, za signaliziranje NaN-ova može da se koristi sistem za izvršavanje da bi označio neinitializovane varijable ili proširio brojeve sa plutajućim tačkama sa drugim posebnim vrednostima bez usporavanja izračunavanja sa običnim vrednostima, iako takve nadogradnje nisu česte.

Reference[uredi | uredi izvor]

  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. [mrtva veza]
  3. ^ Bowman, Kenneth P. (2006). An introduction to programming with IDL : Interactive Data Language. Amsterdam: Elsevier Academic Press. ISBN 9780120885596. OCLC 162570220.