Apvalinimas

Žodis "apvalinimas" reiškia, kad skaitinė vertė pakeičiama kita verte, kuri yra apytiksliai tokia pati, bet trumpesnė, paprastesnė arba aiškesnė. Pavyzdžiui, 23,74 JAV dolerio galima suapvalinti iki 24 JAV dolerių, frakciją 312/937 galima suapvalinti iki 1/3, o išraišką 2 {\displaystyle {\sqrt {2}}}{\displaystyle {\sqrt {2}}} - iki 1,41.

Apvalinimas dažnai atliekamas tikslingai, kad būtų gauta vertė, kurią lengviau užrašyti ir tvarkyti nei pradinę. Taip pat gali būti apvalinama siekiant nurodyti apskaičiuoto skaičiaus tikslumą; pavyzdžiui, kiekį, kuris buvo apskaičiuotas kaip 123 456, bet kuris, kaip žinoma, yra tikslus tik kelių šimtų vienetų tikslumu, geriau nurodyti kaip "apie 123 500".

Kita vertus, dėl apvalinimo rezultatuose gali atsirasti tam tikra apvalinimo paklaida. Apvalinimas beveik neišvengiamas atliekant daugelį skaičiavimų, ypač dalijant du skaičius sveikuoju skaičiumi arba fiksuoto kablelio aritmetikoje, skaičiuojant matematines funkcijas, pavyzdžiui, kvadratines šaknis, logaritmus ir sinusus, arba naudojant slankiojokablelio atvaizdavimą su fiksuotu reikšminių skaitmenų skaičiumi. Skaičiavimų sekoje šios apvalinimo klaidos paprastai kaupiasi, o tam tikrais "blogos būklės" atvejais jos gali padaryti rezultatą beprasmį.

Tiksliai apvalinti transcendentines matematines funkcijas sudėtinga, nes negalima iš anksto žinoti, kiek papildomų skaitmenų reikia apskaičiuoti, kad būtų galima nuspręsti, ar apvalinti į didesnę, ar į mažesnę pusę. Ši problema vadinama "lentelės sudarytojo dilema" (toliau).

Apvalinimas turi daug panašumų su kvantavimu, kuris vyksta, kai fizikinius dydžius reikia užkoduoti skaičiais arba skaitmeniniais signalais.

Apvalinimo tipai

Tipiškos apvalinimo problemos yra šios:

  • aproksimuoti iracionalųjį skaičių trupmena, pvz., π - 22/7;
  • aproksimuoti trupmeną su periodiniu dešimtainės trupmenos plėtiniu baigtine dešimtaine trupmena, pvz., 5/3 - 1,6667;
  • racionalųjį skaičių pakeisti trupmena su mažesniu skaitikliu ir vardikliu, pvz., 3122/9417 pakeisti 1/3;
  • pakeisti trupmeninį dešimtainį skaičių skaičiumi, turinčiu mažiau skaitmenų, pvz., 2,1784 dolerio į 2,18 dolerio;
  • dešimtainį skaičių pakeisti sveiku skaičiumi su daugiau galinių nulių, pvz., 23 217 žmonių - 23 200 žmonių; arba apskritai,
  • 27,2 sekundės pakeičiant reikšmę nurodyto dydžio kartotiniu, pvz., 27,2 sekundės pakeičiant 30 sekundžių (15 kartų).

Suapvalinimas iki nurodyto žingsnio

Dažniausiai apvalinimas yra apvalinimas iki sveikojo skaičiaus arba apskritai iki tam tikro prieaugio sveikojo skaičiaus kartotinio, pavyzdžiui, apvalinimas iki sveikųjų dešimtųjų sekundės dalių, šimtųjų dolerio dalių, iki sveikųjų 1/2 ar 1/8 colio kartotinių, iki sveikųjų dešimčių ar tūkstančių ir t. t.

Apskritai skaičių x apvalinant iki tam tikro nurodyto prieaugio m kartotinio atliekami šie veiksmai:

  1. Padalykite xm ir gautą rezultatą pavadinkite y;
  2. Suapvalinkite y iki sveikojo skaičiaus reikšmės, pavadinkite ją q;
  3. Norėdami gauti suapvalintą vertę z, padauginkite qm.

z = r o u n d ( x , m ) = r o u n d ( x / m ) m {\displaystyle z=\mathrm {round} (x,m)=\mathrm {round} (x/m)\cdot m\,} {\displaystyle z=\mathrm {round} (x,m)=\mathrm {round} (x/m)\cdot m\,}

Pavyzdžiui, apvalinant x = 2,1784 dolerio iki sveikųjų centų (t. y. iki 0,01 kartotinio), reikia apskaičiuoti y = x/m = 2,1784/0,01 = 217,84, tada suapvalinti y iki sveikojo skaičiaus q = 218 ir galiausiai apskaičiuoti z = q×m = 218×0,01 = 2,18.

Apvalinant iki iš anksto nustatyto reikšminių skaitmenų skaičiaus, prieaugis m priklauso nuo apvalinamo skaičiaus (arba apvalinamo rezultato) dydžio.

Prieaugis m paprastai yra baigtinė trupmena bet kurioje skaičių sistemoje, kuri naudojama skaičiams išreikšti. Žmonėms rodyti paprastai naudojama dešimtainė skaitmenų sistema (t. y. m yra sveikasis skaičius, padaugintas iš 10 galybės, pavyzdžiui, 1/1000 arba 25/100). Skaitmeniniuose kompiuteriuose saugomoms tarpinėms vertėms dažnai naudojama dvejetainė skaičių sistema (m yra sveikasis skaičius, padaugintas iš 2 galybės).

Abstrakti vieno argumento funkcija "round()", grąžinanti sveikąjį skaičių iš bet kokios realiosios vertės, turi bent keliolika skirtingų konkrečių apibrėžimų, pateiktų apvalinimo iki sveikojo skaičiaus skyriuje. Abstrakti dviejų argumentų funkcija "round()" yra formaliai apibrėžta čia, tačiau daugeliu atvejų ji naudojama su numanoma inkremento verte m = 1 ir tada redukuojama į lygiavertę abstrakčią vieno argumento funkciją, turinčią taip pat keliolika skirtingų konkrečių apibrėžčių.

Suapvalinimas iki sveikojo skaičiaus

Paprasčiausia apvalinimo forma - pakeisti bet kokį skaičių sveikuoju skaičiumi. Visi toliau nurodyti apvalinimo būdai yra konkrečios ankstesniuose skyriuose pateiktos ir naudotos abstrakčios vieno argumento funkcijos "round()" realizacijos.

Yra daugybė būdų suapvalinti skaičių y iki sveikojo skaičiaus q. Dažniausiai pasitaikantys yra šie

  • suapvalinkite žemyn (arba imkite žemiausią ribą, arba suapvalinkite link minus begalybės): q yra didžiausias sveikasis skaičius, kuris neviršija y.

q = f l o o r ( y ) = y = - - y {\displaystyle q=\mathrm {floor} (y)=\left\lfloor y\right\rfloor =-\left\lceil -y\right\rceil \,} {\displaystyle q=\mathrm {floor} (y)=\left\lfloor y\right\rfloor =-\left\lceil -y\right\rceil \,}

  • suapvalinkite į viršų (arba imkite viršutinę ribą, arba suapvalinkite link plius begalybės): q yra mažiausias sveikasis skaičius, kuris yra ne mažesnis už y.

q = c e i l ( y ) = y = - - y {\displaystyle q=\mathrm {ceil} (y)=\left\lceil y\right\rceil =-\left\lfloor -y\right\rfloor \,} {\displaystyle q=\mathrm {ceil} (y)=\left\lceil y\right\rceil =-\left\lfloor -y\right\rfloor \,}

  • apvalinti link nulio (arba trumpinti, arba apvalinti tolyn nuo begalybės): q yra sveikoji y dalis be trupmenos skaitmenų.

q = t r u n k a t e ( y ) = sgn ( y ) | y | = - sgn ( y ) - | y | {\displaystyle q=\mathrm {truncate} (y)=\operatoriaus pavadinimas {sgn}(y)\left\lfloor \left|y\right|\right\rfloor =-\operatoriaus pavadinimas {sgn}(y)\left\lceil -\left|y\right|\right\rceil \,} {\displaystyle q=\mathrm {truncate} (y)=\operatorname {sgn}(y)\left\lfloor \left|y\right|\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|\right\rceil \,}

  • apvalinti nuo nulio (arba apvalinti link begalybės): jei y yra sveikasis skaičius, q yra y; kitu atveju q yra sveikasis skaičius, kuris yra arčiausiai 0 ir yra toks, kad y yra tarp 0 ir q.

q = sgn ( y ) | y | = - sgn ( y ) - | y | {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|\right\rfloor \,} {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|\right\rfloor \,}

  • suapvalinti iki artimiausio: q yra sveikasis skaičius, kuris yra arčiausiai y (žr. toliau apie lygiųjų laužymo taisykles).

Pirmieji keturi metodai vadinami kryptingu apvalinimu, nes visi poslinkiai nuo pradinio skaičiaus y iki suapvalintos vertės q yra nukreipti į tą pačią ribinę vertę (0, +∞ arba -∞) arba nuo jos.

Jei y yra teigiamas, apvalinimas žemyn yra tas pats, kas apvalinimas link nulio, o apvalinimas aukštyn yra tas pats, kas apvalinimas nuo nulio. Jei y yra neigiamas, apvalinimas žemyn yra tas pats, kas apvalinimas tolyn nuo nulio, o apvalinimas aukštyn yra tas pats, kas apvalinimas link nulio. Bet kuriuo atveju, jei y yra sveikasis skaičius, q yra tik y. Toliau pateiktoje lentelėje pavaizduoti šie apvalinimo būdai:

y

apvalinimas
(link -∞)

apvalus
(link +∞)

suapvalinti iki nulio

apvalus atstumas
nuo nulio

apvalioji dalis

+23.67

+23

+24

+23

+24

+24

+23.50

+23

+24

+23

+24

+23 arba +24

+23.35

+23

+24

+23

+24

+23

+23.00

+23

+23

+23

+23

+23

0

0

0

0

0

0

−23.00

−23

−23

−23

−23

−23

−23.35

−24

−23

−23

−24

−23

−23.50

−24

−23

−23

−24

-23 arba -24

−23.67

−24

−23

−23

−24

−24

Kai daug skaičiavimų atliekama iš eilės, pasirinktas apvalinimo metodas gali turėti labai didelę įtaką rezultatui. Garsus pavyzdys - 1982 m. Vankuverio vertybinių popierių biržos sudarytas naujas indeksas. Iš pradžių jis buvo nustatytas ties 1000 000, o po 22 mėnesių nukrito iki maždaug 520, nors akcijų kainos per tą laikotarpį apskritai padidėjo. Problema kilo dėl to, kad indeksas buvo perskaičiuojamas tūkstančius kartų per dieną ir visada apvalinamas iki 3 skaičių po kablelio, todėl apvalinimo klaidos kaupėsi. Perskaičiavus geriau apvalinant, to paties laikotarpio pabaigoje indekso vertė buvo 1098,892.

Lygiosios

Apvalinant skaičių y iki artimiausio sveikojo skaičiaus, reikalinga tam tikra lygiųjų skaičiavimo taisyklė tiems atvejams, kai y yra lygiai pusiaukelėje tarp dviejų sveikųjų skaičių, t. y. kai y trupmeninė dalis yra lygiai 0,5.

Suapvalinkite pusę į viršų

Ši lygiųjų skaičiavimo taisyklė, vadinama apvalinimu iki pusės (arba apvalinimu iki pusės plius begalybė), plačiai naudojama daugelyje disciplinų. Tai reiškia, kad pusės reikšmės y visada apvalinamos į viršų.

  • Jei y dalis yra lygiai 0,5, tai q = y + 0,5.

q = y + 0,5 = - - y - 0,5 {\displaystyle q=\left\lfloor y+0,5\right\rfloor =-\left\lceil -y-0,5\right\rceil \,} {\displaystyle q=\left\lfloor y+0.5\right\rfloor =-\left\lceil -y-0.5\right\rceil \,}

Pavyzdžiui, pagal šią taisyklę reikšmė 23,5 suapvalinama iki 24, o -23,5 suapvalinama iki -23.

Tai viena iš dviejų taisyklių, kurių paprastai mokoma JAV pradinėse matematikos pamokose. []

Jei ne 0,5 trupmenos, apvalinimo klaidos, atsirandančios taikant apvalinimo iki artimiausios trupmenos metodą, būtų gana simetriškos: kiekvienai trupmenai, kuri apvalinama į didesnę pusę (pvz., 0,268), yra papildoma trupmena (pvz., 0,732), kuri apvalinama į mažesnę pusę tokiu pat dydžiu. Apvalinant didelį skaičių su atsitiktinėmis trupmeninėmis dalimis rinkinį, šios apvalinimo klaidos statistiškai kompensuotų viena kitą, ir tikėtina (vidutinė) apvalintų skaičių vertė būtų lygi tikėtinai pradinių skaičių vertei.

Tačiau lygiųjų skaičiaus apvalinimo iki pusės taisyklė nėra simetriška, nes trupmenos, kurios yra lygiai 0,5, visada apvalinamos į viršų. Ši asimetrija lemia teigiamą apvalinimo klaidų paklaidą. Pavyzdžiui, jei trupmeną y sudaro trys atsitiktiniai dešimtainiai skaitmenys, tai tikėtina q reikšmė bus 0,0005 didesnė už tikėtiną reikšmę y. Dėl šios priežasties apvalinimas iki artimiausio taško su apvalinimo iki pusės į viršų taisykle taip pat (dviprasmiškai) vadinamas asimetriniu apvalinimu.

Viena iš priežasčių, kodėl apvalinama iki 0,5, yra ta, kad reikia patikrinti tik vieną skaitmenį. Pavyzdžiui, kai matome 17,50000..., pirmieji trys skaičiai 17,5 lemia, kad skaičius bus suapvalintas iki 18. Jei būtų taikoma priešinga taisyklė (apvalinti perpus žemyn), tuomet reikėtų patikrinti visus nulius po kablelio, kad būtų nustatyta, ar reikšmė yra lygiai 17,5.

Apvalus pusiau žemyn

Taip pat galima naudoti apvalinimą iki pusės žemyn (arba apvalinimą iki pusės minus begalybė), o ne įprastesnį apvalinimą iki pusės į viršų (apvalinimo iki pusės į viršų metodas yra įprastas, bet tai tik susitarimas).

  • Jei y dalis yra lygiai 0,5, tai q = y - 0,5.

q = y - 0,5 = - - y + 0,5 {\displaystyle q=\left\lceil y-0,5\right\rceil =-\left\lfloor -y+0,5\right\rfloor \,} {\displaystyle q=\left\lceil y-0.5\right\rceil =-\left\lfloor -y+0.5\right\rfloor \,}

Pavyzdžiui, 23,5 suapvalinama iki 23, o -23,5 - iki -24.

Lygiųjų skaičių apvalinimo iki pusės taisyklė nėra simetriška, nes trupmenos, kurios yra lygiai 0,5, visada apvalinamos žemyn. Ši asimetrija lemia neigiamą apvalinimo paklaidų nuokrypį. Pavyzdžiui, jei trupmeną y sudaro trys atsitiktiniai dešimtainiai skaitmenys, tai tikėtina q reikšmė bus 0,0005 mažesnė už tikėtiną reikšmę y. Dėl šios priežasties apvalinimas iki artimiausio su apvalinimo perpus žemyn taisykle taip pat (dviprasmiškai) vadinamas asimetriniu apvalinimu.

Suapvalinkite pusę nuo nulio

Kitas paprastai mokomas ir naudojamas lygiųjų skaičiavimo metodas yra apvalinimas pusę nuo nulio (arba pusę į begalybę), t. y:

  • Jei y dalis yra lygiai 0,5, tuomet q = y + 0,5, jei y teigiama, ir q = y - 0,5, jei y neigiama.

q = sgn ( y ) | y | + 0,5 = - sgn ( y ) - | y | - 0,5 {\displaystyle q=\operatorname {sgn}(y)\left\lfloor \left|y\right|+0.5\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|-0.5\right\rceil \,} {\displaystyle q=\operatorname {sgn}(y)\left\lfloor \left|y\right|+0.5\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|-0.5\right\rceil \,}

Pavyzdžiui, 23,5 suapvalinama iki 24, o -23,5 suapvalinama iki -24.

Šiuo metodu teigiamos ir neigiamos reikšmės vertinamos simetriškai, todėl, jei pradiniai skaičiai yra teigiami arba neigiami su vienoda tikimybe, jie neturi bendro nuokrypio. Tačiau ši taisyklė vis tiek lems teigiamų skaičių teigiamą nuokrypį, o neigiamų - neigiamą.

Jis dažnai naudojamas konvertuojant valiutą ir apvalinant kainas (kai suma pirmiausia perskaičiuojama į mažiausią reikšmingą valiutos dalį, pvz., euro centus), nes jį lengva paaiškinti atsižvelgiant tik į pirmąjį trupmenos skaitmenį, nepriklausomai nuo papildomų tikslumo skaitmenų ar sumos ženklo (siekiant griežto mokėtojo ir gavėjo lygiavertiškumo).

Apvalinkite pusę link nulio

Taip pat galima pusę apvalinti link nulio (arba pusę apvalinti nuo begalybės), o ne kaip įprasta apvalinti pusę nuo nulio (apvalinimas pusę nuo nulio yra įprastas metodas, tačiau tai yra ne kas kita, kaip tik susitarimas).

  • Jei y dalis yra lygiai 0,5, tuomet q = y - 0,5, jei y teigiama, ir q = y + 0,5, jei y neigiama.

q = sgn ( y ) | y | - 0,5 = - sgn ( y ) - | y | + 0,5 {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|-0.5\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|+0.5\right\rfloor \,} {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|-0.5\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|+0.5\right\rfloor \,}

Pavyzdžiui, 23,5 suapvalinama iki 23, o -23,5 suapvalinama iki -23.

Šiuo metodu teigiamos ir neigiamos reikšmės taip pat traktuojamos simetriškai, todėl, jei pradiniai skaičiai yra teigiami arba neigiami su vienoda tikimybe, jis neturi bendro nuokrypio. Tačiau ši taisyklė vis tiek lems neigiamą teigiamų skaičių nuokrypį, o neigiamų - teigiamą.

Suapvalinkite pusę iki lyginės

Dar mažiau šališka lygiųjų skaičiavimo taisyklė yra apvalinimas nuo pusės iki lygiųjų, t. y.

  • Jei y dalis yra 0,5, tai q yra lyginis sveikasis skaičius, artimiausias y.

Pavyzdžiui, +23,5 tampa +24, +22,5 - +22, -22,5 - -22, o -23,5 - -24.

Šiuo metodu teigiamos ir neigiamos reikšmės taip pat traktuojamos simetriškai, todėl, jei pradiniai skaičiai yra teigiami arba neigiami su vienoda tikimybe, jis neturi bendro nuokrypio. Be to, daugumos priimtinų y reikšmių pasiskirstymų atveju tikėtina (vidutinė) suapvalintų skaičių vertė iš esmės yra tokia pati kaip ir pradinių skaičių vertė, net jei visi šie skaičiai yra teigiami (arba neigiami). Tačiau ši taisyklė vis tiek lems teigiamą lyginių skaičių (įskaitant nulį) ir neigiamą nelyginių skaičių nuokrypį.

Šis apvalinimo iki artimiausios reikšmės metodo variantas taip pat vadinamas nešališku apvalinimu (dviprasmiškai ir šiek tiek piktnaudžiaujant), konverguojančiu apvalinimu, statistiniu apvalinimu, olandiškuoju apvalinimu, Gauso apvalinimu arba bankininkų apvalinimu. Jis plačiai naudojamas buhalterijoje.

Tai numatytasis apvalinimo režimas, naudojamas IEEE 754 skaičiavimo funkcijose ir operatoriuose.

Apvalinkite pusę iki nelyginio skaičiaus

Kita lygiųjų skaičiavimo taisyklė, labai panaši į lygiųjų skaičiavimo taisyklę, t. y.

  • Jei y dalis yra 0,5, tai q yra nelyginis sveikasis skaičius, artimiausias y.

Pavyzdžiui, +22,5 tampa +23, +21,5 - +21, -21,5 - -21, o -22,5 - -23.

Šiuo metodu teigiamos ir neigiamos reikšmės taip pat traktuojamos simetriškai, todėl, jei pradiniai skaičiai yra teigiami arba neigiami su vienoda tikimybe, jis neturi bendro nuokrypio. Be to, daugumos priimtinų y reikšmių pasiskirstymų atveju tikėtina (vidutinė) suapvalintų skaičių vertė iš esmės yra tokia pati kaip ir pradinių skaičių vertė, net jei visi šie skaičiai yra teigiami (arba neigiami). Tačiau ši taisyklė vis tiek lems neigiamą lyginių skaičių (įskaitant nulį) ir teigiamą nelyginių skaičių nuokrypį.

Šis variantas beveik niekada nenaudojamas daugumoje skaičiavimų, išskyrus atvejus, kai norima išvengti 0,5 arba -0,5 apvalinimo iki nulio arba išvengti skaičių, pateikiamų kaip slankiojo kablelio (su ribotais mastelio eksponentės intervalais), mastelio didinimo, kad ne begalinis skaičius būtų apvalinamas iki begalinio arba kad maža denormali reikšmė būtų apvalinama iki normalios nenulinės reikšmės (tokie atvejai gali pasitaikyti naudojant apvalinimo iki pusės režimą). Iš esmės šis režimas teikia pirmenybę esamos lygiųjų skaičių skalės išsaugojimui ir, jei įmanoma, vengia rezultatų už intervalo ribų.

Stochastinis apvalinimas

Kitas nešališkas lygiųjų skaičiavimo metodas yra stochastinis apvalinimas:

  • Jei y trupmeninė dalis yra 0,5, atsitiktine tvarka pasirinkite qy + 0,5 ir y - 0,5 su vienoda tikimybe.

Ši taisyklė, kaip ir taisyklė "apvalinti pusę į lyginę", iš esmės neturi bendro šališkumo, tačiau ji taip pat yra teisinga lyginėms ir nelyginėms q reikšmėms. Kita vertus, į rezultatą įtraukiamas atsitiktinis komponentas; du kartus atlikus tą patį skaičiavimą su tais pačiais duomenimis, gali būti gauti du skirtingi rezultatai. Be to, jis gali būti nesąmoningai šališkas, jei žmonės (o ne kompiuteriai ar atsitiktiniai prietaisai) "atsitiktinai" nusprendžia, kuria kryptimi apvalinti.

Pakaitinis lygiųjų skaičiavimas

Vienas būdas, labiau neaiškus nei dauguma kitų, yra apvalios pusės pakaitomis.

  • Jei trupmeninė dalis yra 0,5, pakaitomis apvalinkite į didesnę ir mažesnę pusę: pirmą kartą atsiradus 0,5 trupmeninei daliai, apvalinkite į didesnę pusę; antrą kartą atsiradus 0,5 daliai, apvalinkite į mažesnę pusę; ir t. t., ir t. t.

Taip nuslopinamas atsitiktinis rezultato komponentas, jei 0,5 trupmeninės dalies atvejus galima veiksmingai suskaičiuoti. Tačiau, jei bendras įvykių skaičius yra nelyginis, jis vis tiek gali sukelti teigiamą arba neigiamą paklaidą, priklausomai nuo pirmajam įvykiui priskirtos apvalinimo krypties.

Paprastas ditheringas

Tam tikromis aplinkybėmis visi pirmiau minėti apvalinimo metodai gali būti nepatenkinami. Pavyzdžiui, tarkime, kad y yra tikslus garso signalo matavimas, kuris apvalinamas iki sveikojo skaičiaus q, kad būtų sumažintos saugojimo arba perdavimo sąnaudos. Jei y laikui bėgant kinta lėtai, bet kuris iš pirmiau nurodytų apvalinimo metodų lems, kad q bus visiškai pastovus ilgus intervalus, kuriuos skiria staigūs šuoliai ±1. Atkuriant q signalą šie žingsniai bus girdimi kaip labai nemalonus triukšmas, o bet kokie pradinio signalo svyravimai tarp dviejų sveikųjų skaičių reikšmių bus visiškai prarasti.

Vienas iš būdų išvengti šios problemos - kiekvieną reikšmę y apvalinti į viršų su tikimybe, lygia jos daliai, o į apačią - su tos tikimybės papildiniu. Pavyzdžiui, skaičius 23,17 būtų suapvalintas iki 24 su tikimybe 0,17, o žemyn iki 23 su tikimybe 1 - 0,17 = 0,83. (Tai atitinka apvalinimą žemyn y + s, kur s yra atsitiktinis skaičius, tolygiai pasiskirstęs tarp 0 ir 1.) Naudojant šį specialų apvalinimą, vadinamą ditheringu, staigius žingsnius pakeičia ne toks nemalonus triukšmas, ir net nedideli pradinio signalo pokyčiai tam tikru mastu išlieka. Kaip ir stochastinis lygiųjų skaičiavimo metodas, ditheringas neturi šališkumo: jei visos trupmenos reikšmės yra vienodai tikėtinos, apvalinimas į didesnę pusę yra toks pat tikėtinas, kaip ir apvalinimas į mažesnę pusę; tas pats pasakytina ir apie kelių suapvalintų skaičių sumą. Kita vertus, ditheringas į rezultatą įneša atsitiktinį komponentą, kuris yra daug didesnis nei stochastinio lygiųjų skaičiavimo atveju.

Tiksliau tariant, kiekvieno ditherizuoto skaičiaus apvalinimo klaida bus tolygiai pasiskirstęs atsitiktinis kintamasis, kurio vidurkis lygus nuliui, o standartinis nuokrypis 1 / 12 ≈ 0,2886 {\displaystyle 1/{\sqrt {12}}\aprox 0,2886} {\displaystyle 1/{\sqrt {12}}\approx 0.2886}, kuris yra geresnis nei 1/2 standartinio nuokrypio, taikomo taikant paprastus prognozavimo metodus, bet šiek tiek didesnis nei taikant paprastesnį stochastinį metodą. Tačiau n suapvalintų skaičių suma bus atsitiktinis kintamasis, kurio tikėtina paklaida lygi nuliui, bet standartinis nuokrypis n / 12 {\displaystyle {\sqrt {n}}/{\sqrt {12}}}. {\displaystyle {\sqrt {n}}/{\sqrt {12}}}(bendras likęs triukšmas), kuris pusiau kvadratiškai skiriasi ir gali būti lengvai pastebimas, net jei apvalinimo klaidos standartinis nuokrypis vienai imčiai bus 1 / 12 n {\displaystyle 1/{\sqrt {12n}}{\displaystyle 1/{\sqrt {12n}}}, kuris lėtai pusiau kvadratiškai konverguoja prie nulio. Taigi, šis atsitiktinis pasiskirstymas vis tiek gali būti per didelis kai kurioms programoms, kuriose apvalinama daug duomenų.

Daugiamatis ditheringas

Šis paprasto ditheringo metodo variantas vis dar apvalina reikšmes su tikimybe, lygia jų daliai. Tačiau, užuot apvalinant pavienes imtis naudojus atsitiktinį pasiskirstymą, apvalinimo paklaida, atsirandanti kiekvienoje apvalintoje imtyje, yra sumuojama kitiems aplinkiniams elementams, kuriuos reikia imti arba apskaičiuoti; tada ši sukaupta vertė pridedama prie šių kitų imčių arba apskaičiuotų verčių, kurias reikia apvalinti, vertės, kad modifikuotose vertėse būtų atsižvelgta į šį skirtumą taikant prognozavimo modelį (pvz., Floydo-Steinbergo apvalinimą).

Tada pakeistos reikšmės apvalinamos bet kuriuo iš pirmiau minėtų apvalinimo metodų, o geriausi yra stochastinis arba ditheringo metodai: pastaruoju atveju n suapvalintų skaičių suma vis dar bus atsitiktinis kintamasis, kurio tikėtina paklaida lygi nuliui, bet kurio standartinis nuokrypis yra puikiai pastovus - 1/12 {\displaystyle 1/{\sqrt {12}}}. {\displaystyle 1/{\sqrt {12}}}vietoj pusiau kvadratinio nuokrypio suapvalinant pavienes imtis; o bendras vidutinis suapvalinimo klaidos nuokrypis suapvalintai imčiai bus 1 / ( n 12 ) {\displaystyle 1/(n{\sqrt {12}}})}, {\displaystyle 1/(n{\sqrt {12}})}kuris hiperboliškai konverguos į nulį greičiau nei pusiau hiperbolinis konvergavimas suapvalinant pavienes imtis.

Praktikoje, apvalinant didelius imčių duomenų rinkinius (pvz., garso, vaizdų ir vaizdo įrašų atvaizdavimą), apvalinimo klaidų kaupimas dažniausiai naudojamas su paprastu prognoziniu modifikuotų verčių apvalinimu (pvz., apvalinimu link nulio), nes taip vis tiek išlaikomas hiperbolinis bendro vidutinio apvalinimo klaidų nuokrypio ir jo standartinio nuokrypio konvergavimas link nulio. Šis patobulinimas dažnai naudojamas apdorojant vaizdus ir garsą (visų pirma atliekant tikslias perskaičiavimo ir išlyginimo operacijas, kai dėl paprasto tikimybinio atskirų verčių apvalinimo vis tiek gali atsirasti juntamas triukšmas, kartais net blogesnis už moirė efektą, atsirandantį taikant paprastus netikimybinius apvalinimo metodus atskiriems pavyzdžiams).

Efektyvus sukauptų apvalinimo klaidų skleidimas gali priklausyti nuo diskrečiosios imties duomenų dimensijos, kurią reikia apvalinti: imant dvimačius vaizdus, įskaitant spalvotus vaizdus (kurie prideda diskrečiąją spalvų plokštumų dimensiją), trimačius vaizdo įrašus (kurie prideda diskrečiąją laiko dimensiją) arba polifoninius garso duomenis (naudojant diskrečiąsias laiko ir kanalo dimensijas), vis tiek gali būti pageidautina šią klaidą skleisti pageidaujama kryptimi arba vienodai į kelias ortogonalias dimensijas, pvz., vertikaliai ir vertikaliai. dvimačių vaizdų atveju - horizontaliai, arba į lygiagrečius spalvų kanalus toje pačioje padėtyje ir (arba) laiko žyma, ir priklausomai nuo kitų šių ortogonalių diskrečiųjų matmenų savybių (pagal suvokimo modelį). Tokiais atvejais gali būti naudojami keli apvalinimo klaidų kaupikliai (bent po vieną kiekvienam diskrečiajam matmeniui) arba (n-1)-matmenų kaupiklių vektorius (arba matrica).

Kai kuriais iš šių atvejų imties ir apvalinimo duomenų diskretieji matmenys gali būti traktuojami ne ortogonališkai: Pavyzdžiui, dirbant su spalvotais vaizdais, kiekvieno fizinio matmens (aukščio, pločio ir pasirinktinai laiko) trichromatinių spalvinių plokštumų duomenys gali būti perskirstyti naudojant suvokiamąjį spalvų modelį, kad apvalinimo klaidų akumuliatoriai būtų skirti šviesumui išsaugoti su didesne tikimybe nei atspalviui ar sodrumui, užuot skleidus klaidas kiekvienoje ortogonalioje spalvinėje plokštumoje atskirai; o stereofoniniuose garso duomenyse du suapvalinti duomenų kanalai (kairysis ir dešinysis) gali būti suapvalinti kartu, kad būtų išsaugota jų vidutinė vertė, pirmenybę teikiant jų efektyviam skirtumui, kuris absorbuos didžiąją dalį likusių suapvalinimo paklaidų, subalansuotai aplink nulį.

Apvalinimas iki paprastųjų trupmenų

Kai kuriais atvejais pageidautina suapvalinti tam tikrą skaičių x iki "tvarkingos" trupmenos, t. y. artimiausios trupmenos z = m/n, kurios skaitiklis m ir vardiklis n neviršija tam tikro maksimumo. Šis uždavinys skiriasi nuo uždavinio suapvalinti reikšmę iki fiksuoto dešimtainių ar dvejetainių skaitmenų skaičiaus arba tam tikro vieneto kartotinio m. Šis uždavinys yra susijęs su Farejaus sekomis, Sterno-Broko medžiu ir tęstinėmis trupmenomis.

Laipsniškas apvalinimas

Šis apvalinimo tipas, dar vadinamas apvalinimu pagal logaritminę skalę, yra apvalinimo iki nurodyto prieaugio variantas, tačiau prieaugis keičiamas priklausomai nuo rezultato skalės ir dydžio. Konkrečiai siekiama apriboti reikšminių skaitmenų skaičių, suapvalinant reikšmę taip, kad nereikšmingų skaitmenų būtų atsisakyta. Šis apvalinimo tipas netiesiogiai taikomas skaičiams, apskaičiuotiems naudojant riboto tikslumo kintamojo kablelio reikšmes (pvz., IEEE-754 float ir double tipus), tačiau jis gali būti naudojamas apskritai apvalinant bet kokias realiąsias reikšmes su bet kokiu teigiamu reikšminių skaitmenų skaičiumi ir bet kokiu griežtai teigiamu realiuoju pagrindu.

Pavyzdžiui, jis gali būti naudojamas inžinerinėje grafikoje duomenims, kurių logaritminė skalė yra su kintamais žingsniais (pavyzdžiui, bangų ilgiai, kurių pagrindas nebūtinai yra sveikasis skaičius), atvaizduoti arba statistiniuose duomenyse realiųjų verčių klasėms apibrėžti eksponentiškai didėjančio pločio intervaluose (tačiau dažniausiai naudojamas su sveikųjų skaičių pagrindais, pavyzdžiui, 10 arba 2). [šaltinis? ]

Šio tipo apvalinimas grindžiamas logaritminiu masteliu, apibrėžtu fiksuotu nenuliniu realiuoju mastelio koeficientu s (dažniausiai šis koeficientas yra s=1) ir fiksuotu teigiamuoju pagrindu b>1 (nebūtinai sveikuoju skaičiumi ir dažniausiai besiskiriančiu nuo mastelio koeficiento) bei fiksuotu sveikuoju skaičiumi n>0 reikšminių skaitmenų tame pagrinde (nuo kurio priklauso apvalinimui naudojamo prieaugio vertė ir apskaičiuotas apvalinamo skaičiaus efektyvusis mastelis).

Pirminis argumento skaičius (taip pat ir gautas suapvalintas skaičius) pirmiausia pateikiamas eksponentine notacija x = s-a-m-bc, kur ženklas s yra +1 arba -1, absoliutinė mantisa a ribojama pusiau atviru teigiamu intervalu [1/b,1], o eksponentas c yra bet koks (teigiamas arba neigiamas) sveikasis skaičius. Šiame pavaizdavime visi reikšminiai skaitmenys yra absoliučiosios mantisos trupmeninėje dalyje, kurios sveikoji dalis visada lygi nuliui.

Jei pradinis skaičius (arba suapvalintas skaičius) yra 0, absoliučioji mantiza a apibrėžiama kaip 0, o eksponentas c yra fiksuotas ir turi bet kokią reikšmę (pagal daugumą susitarimų - 0, tačiau kai kuriose slankiojo kablelio atvaizdavimo sistemose negalima naudoti nulinės absoliučiosios mantizės, o paliekama tam tikra maksimali neigiama eksponentui c priskiriama reikšmė, kuri reiškia patį skaičių 0), o ženklas s gali būti pasirenkamas savavališkai tarp -1 arba +1 (paprastai jis nustatomas +1 paprastam nuliui arba nustatomas toks pat ženklas kaip argumento suapvalinta reikšmė, jei skaičiaus atvaizdavimas leidžia atskirti teigiamus ir neigiamus nulius, net jei jie galiausiai reiškia tą pačią skaitinę reikšmę 0).

Taip pat galima lygiavertiškai naudoti ir mastelio eksponentinį atvaizdavimą x = a-s-bc, kai pasirašyta mantisa a yra lygi nuliui arba yra viename iš dviejų pusiau atvirų intervalų (-1,-1/b] ir [+1/b,+1), ir taip bus toliau pateiktame algoritme.

Apskaičiuojant šį perskaičiuotą apvalinimą, paprastai atliekami tokie veiksmai:

  1. jei x lygus nuliui, tiesiog grąžinkite x; priešingu atveju:
  2. konvertuoti x į mastelio eksponentinį atvaizdavimą su pasirašyta mantisa:
    x = a
    s b c {\displaystyle x=a\cdot s\cdot b^{c}\,} {\displaystyle x=a\cdot s\cdot b^{c}\,}
    1. tegul x' yra neskaluota x vertė, padalijus ją iš mastelio keitimo koeficiento s:
      x ′ = x / s {\displaystyle x'=x/s\,}
      {\displaystyle x'=x/s\,} ;
    2. tegul mastelio eksponentas c yra vienas plius x' absoliučiosios vertės, suapvalintos iki sveikojo skaičiaus (link minus begalybės), bazinis logaritmas:
      c = 1 +
      log b | x ′ | = 1 + log b | x / s | {\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|right\rfloor \,}{\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|\right\rfloor \,} ;
    3. tegul pasirašyta mantisa a yra x' sandauga, padalinta iš b iki galybės c:
      a = x ′
      b - c = x / s b - c {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,} {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,}
  3. apskaičiuoti suapvalintą vertę pagal šį atvaizdavimą:
    1. tegul c' yra pradinis x' mastelio eksponentas c:
      c ′ = c {\displaystyle c'=c\,}
      {\displaystyle c'=c\,}
    2. tegul m yra mantisos a apvalinimo inkrementas, priklausomai nuo išsaugotinų reikšminių skaitmenų skaičiaus:
      m = b - n {\displaystyle m=b^{-n}\,}
      {\displaystyle m=b^{-n}\,}
    3. tegul a' yra pasirašyta mantisa a, suapvalinta pagal šį prieaugį m ir pasirinktą apvalinimo būdą:
      a ′ = r o u n d ( a , m ) = r o u n d ( x / s
      b n - c ′ ) b - n {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'})\cdot b^{-n}\,} {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'})\cdot b^{-n}\,}
    4. jei a' absoliutinė vertė nėra mažesnė už b, tuomet sumažinkite n (padauginkite inkrementą mb), padidinkite mastelio eksponentą c', padalykite pasirašytąją mantisą ab ir vėl pradėkite naujos pasirašytosios mantisos a apvalinimą į a' pagal tą pačią formulę; šio žingsnio galima išvengti tik tuo atveju, jei abtract "round()" funkcija visada apvalina a link 0 (t. y.t. y. kai tai yra paprastas sutrumpinimas), tačiau jis yra būtinas, jei ji gali apvalinti a link begalybės, nes tokiu atveju apvalinta mantisa gali turėti didesnį mastelio eksponentą, todėl lieka papildomas tikslumo skaitmuo.
  4. grąžinti suapvalintą vertę:
    y = s c a l e d r o u n d ( x , s , b , n ) = a ′
    s b c ′ = r o u n d ( x / s b n - c ′ ) s b c ′ - n {\displaystyle y=\mathrm {scaledround} (x,s,b,n)=a'\cdot s\cdot b^{c'}=\mathrm {round} (x/s\cdot b^{n-c'})\cdot s\cdot b^{c'-n}\,}{\displaystyle y=\mathrm {scaledround} (x,s,b,n)=a'\cdot s\cdot b^{c'}=\mathrm {round} (x/s\cdot b^{n-c'})\cdot s\cdot b^{c'-n}\,} .

Abstrakčios funkcijos "round()" atveju šis apvalinimo tipas gali būti bet kuris iš kitame skyriuje išsamiau aprašytų apvalinimo iki sveikųjų skaičių būdų, tačiau dažniausiai naudojamas apvalinimo iki artimiausio skaičiaus būdas (toliau išsamiau aprašytos lygiųjų skaičiavimo taisyklės).

Pavyzdžiui:

  • naudojant bet kokį apvalinimo iki artimiausio skaičiaus režimą, 1,234 su mastelio koeficientu 1 ir 10 baze bei 3 reikšminiais skaitmenimis (maksimalus santykinis tikslumas = 1/1000) bus gauta 1,23;
  • Panašiai suapvalinus 1,236 bus gauta 1,24;
  • panašiai suapvalinus 21,236 bus gauta 21,2;
  • panašiai suapvalinus 321,236 bus gautas 321;
  • naudojant apvalinimo žemyn režimą, kai apvalinama 1,234 mastelio koeficientu 1, esant 10 bazei ir 3 reikšminiams skaitmenims (didžiausias santykinis tikslumas = 1/1000), bus gauta 1,23;
  • Panašiai suapvalinus 1,236, taip pat bus gauta 1,23;
  • 3 π / 7 ≈ 6,8571 π 2 - 4 {\displaystyle \scriptstyle 3\pi /7\;\approx \;6.8571\cdot \pi \cdot 2^{-4}}{\displaystyle \scriptstyle 3\pi /7\;\approx \;6.8571\cdot \pi \cdot 2^{-4}} su mastelio koeficientu π {\displaystyle \scriptstyle \pi }{\displaystyle \scriptstyle \pi } 2 pagrindu ir 3 reikšminiais skaitmenimis (didžiausias santykinis tikslumas = 1/8), kai naudojamas apvalinimo žemyn režimas, bus gauta 6 π 2 - 4 = 3 π / 8 {\displaystyle \scriptstyle 6\cdot \pi \cdot 2^{-4};=\;3\pi /8}{\displaystyle \scriptstyle 6\cdot \pi \cdot 2^{-4}\;=\;3\pi /8} ;
  • panašus 5 π / 7 ≈ 5,7143 π 2 - 3 {\displaystyle \scriptstyle 5\pi /7\;\aprox \;5.7143\cdot \pi \cdot 2^{-3}}{\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}} grąžins 5 π 2 - 3 = 5 π / 8 {\displaystyle \scriptstyle 5\cdot \pi \cdot 2^{-3}\;=\;5\pi /8}{\displaystyle \scriptstyle 5\cdot \pi \cdot 2^{-3}\;=\;5\pi /8} ;
  • panašus π / 7 ≈ 4,5714 π 2 - 5 {\displaystyle \scriptstyle \pi /7\;\aprox \;4.5714\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}} grąžins 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • panašus π / 8 = 4 π 2 - 5 {\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}} apvalinimas taip pat grąžins 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • panašus π / 15 ≈ 4,2667 π 2 - 6 {\displaystyle \scriptstyle \pi /15\;\aprox \;4.2667\cdot \pi \cdot 2^{-6}}{\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}} grąžins 4 π 2 - 6 = π / 16 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16} {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}.

Suapvalinkite iki turimos vertės

Paruošta mediena, rašomasis popierius, kondensatoriai ir daugelis kitų gaminių paprastai parduodami tik kelių standartinių dydžių.

Daugelyje projektavimo procedūrų aprašoma, kaip apskaičiuoti apytikslę vertę, o tada "suapvalinti" iki tam tikro standartinio dydžio, naudojant tokias frazes kaip "suapvalinti iki artimiausios standartinės vertės", "suapvalinti iki artimiausios standartinės vertės" arba "suapvalinti iki artimiausios standartinės vertės".

Kai pageidaujamų reikšmių rinkinys yra vienodai išsidėstęs logaritminėje skalėje, artimiausios pageidaujamos reikšmės parinkimas bet kuriai reikšmei gali būti laikomas tam tikru apvalinimu. Tokias "suapvalintas" vertes galima tiesiogiai apskaičiuoti.

Slankiojo kablelio apvalinimas

Slankiojo kablelio aritmetikoje apvalinimo tikslas - paversti duotą vertę x verte z su tam tikru reikšminių skaitmenų skaičiumi. Kitaip tariant, z turi būti skaičiaus m, kuris priklauso nuo z dydžio, kartotinis. Skaičius m yra slankiojo kablelio formos bazės (paprastai 2 arba 10) galingumas.

Išskyrus šią detalę, visi pirmiau aptarti apvalinimo variantai taikomi ir skaičių su slankiuoju kableliu apvalinimui. Tokio apvalinimo algoritmas pateikiamas pirmiau pateiktame skirsnyje "Apvalinimas pagal mastelį", tačiau su pastoviu mastelio koeficientu s=1 ir sveikojo skaičiaus baze b>1.

Rezultatų, kurių suapvalintas rezultatas būtų perpildytas, atveju kryptingo apvalinimo rezultatas yra arba atitinkama pasirašyta begalybė, arba didžiausias atvaizduojamas teigiamas baigtinis skaičius (arba mažiausias atvaizduojamas neigiamas baigtinis skaičius, jei x yra neigiamas), priklausomai nuo apvalinimo krypties. Perpildymo rezultatas įprastu atveju, kai apvalinama iki lyginio skaičiaus, visada yra atitinkama begalybė.

Be to, jei suapvalintas rezultatas būtų per mažas, t. y. jei eksponentas viršytų mažiausią atvaizduojamą sveikojo skaičiaus vertę, faktinis rezultatas gali būti arba nulis (galbūt pasirašytas, jei atvaizdavimas gali išlaikyti nulių ženklų skirtumą), arba mažiausias atvaizduojamas teigiamas baigtinis skaičius (arba didžiausias atvaizduojamas neigiamas baigtinis skaičius, jei x yra neigiamas), galbūt denormalus teigiamas arba neigiamas skaičius (jei mantisa saugo visus savo reikšmingus skaitmenis, tokiu atveju reikšmingiausias skaitmuo vis tiek gali būti saugomas žemesnėje pozicijoje, aukščiausius saugomus skaitmenis prilyginant nuliui, ir taip saugoma mantisa nepaleidžia reikšmingiausio skaitmens, o tai įmanoma, kai pagrindas b = 2, nes šiame pagrinde reikšmingiausias skaitmuo visada yra 1), priklausomai nuo apvalinimo krypties. Įprastiniu apvalinimo iki lyginio skaičiaus atveju nepakankamos reikšmės rezultatas visada yra atitinkamas nulis.

Dvigubas apvalinimas

Du kartus iš eilės suapvalinus skaičių skirtingu tikslumu, kai pastarasis tikslumas yra didesnis, negarantuojama, kad rezultatas bus toks pat, kaip ir vieną kartą suapvalinus galutiniu tikslumu, išskyrus kryptingo apvalinimo atvejį. Pavyzdžiui, suapvalinus 9,46 iki vieno skaitmens po kablelio, gaunama 9,5, o tada 10, kai apvalinama iki sveikojo skaičiaus, taikant apvalinimą pusiau iki lyginio tikslumo, tačiau tiesiogiai apvalinant iki sveikojo skaičiaus gaunama 9.

Kai kurios kompiuterių kalbos ir IEEE 754-2008 standartas nurodo, kad atliekant nesudėtingus skaičiavimus rezultatas neturėtų būti apvalinamas du kartus. Ypač daug problemų kilo dėl "Java", nes ji sukurta taip, kad būtų galima vienodai paleisti skirtingose mašinose, todėl norint tai pasiekti su x87 slankiojo kablelio skaičiumi, teko taikyti specialius programavimo triukus. Java kalba buvo pakeista taip, kad leistų gauti skirtingus rezultatus, kai skirtumas nesvarbus, ir reikalautų naudoti kvalifikatorių "strictfp", kai rezultatai turi tiksliai atitikti.

Tikslus skaičiavimas su suapvalinta aritmetika

Norint įvertinti tikslią diskrečios srities ir intervalo funkcijos vertę, galima naudoti suapvalintąją aritmetiką. Pavyzdžiui, jei žinome, kad sveikasis skaičius n yra tobulasis kvadratas, galime apskaičiuoti jo kvadratinę šaknį paversdami n į kintamojo kablelio reikšmę x, apskaičiuodami apytikslę x kvadratinę šaknį y su slankiuoju kableliu ir tada suapvalindami y iki artimiausio sveikojo skaičiaus q. Jei n nėra per didelis, kintamojo kablelio apvalinimo paklaida y bus mažesnė nei 0,5, todėl suapvalinta reikšmė q bus tiksli n kvadratinė šaknis.

Stalo gamintojo dilema

Viljamas Kahanas (William Kahan) sukūrė terminą "lentelės sudarytojo dilema" (angl. The Table-Maker's Dilemma), kuriuo įvardijamos nežinomos transcendentinių funkcijų apvalinimo sąnaudos:

"Niekas nežino, kiek kainuotų apskaičiuoti y^w, teisingai suapvalintą kiekvienam iš dviejų slankiojo kablelio argumentų, kuriam esant jis neperpildomas/neperpildomas. Vietoj to, geros reputacijos matematikos bibliotekos elementarias transcendentines funkcijas dažniausiai apskaičiuoja šiek tiek daugiau nei pusės ulp ir beveik visada - vieno ulp ribose. Kodėl Y^W negali būti suapvalinta per pusę ulp, kaip SQRT? Nes niekas nežino, kiek skaičiavimų tai kainuotų... Nėra jokio bendro būdo numatyti, kiek papildomų skaitmenų reikės perkelti, norint apskaičiuoti transcendentinę išraišką ir teisingai ją suapvalinti iki tam tikro iš anksto nustatyto skaitmenų skaičiaus. Netgi faktas (jei jis teisingas), kad galiausiai pakaks baigtinio skaičiaus papildomų skaitmenų, gali būti gili teorema."

IEEE slankiojo kablelio standartas garantuoja, kad sudedant, atimant, dauginant, dalijant, dalijant kvadratinę šaknį ir slankiojo kablelio likutį bus gautas teisingai suapvalintas begalinio tikslumo operacijos rezultatas. Tačiau sudėtingesnėms funkcijoms tokios garantijos nesuteikiamos ir jos paprastai geriausiu atveju būna tikslios tik paskutinio bito tikslumu.

Naudojant Gelfondo ir Šneiderio teoremą ir Lindemanno ir Veierstrasso teoremą galima įrodyti, kad daugelis standartinių elementariųjų funkcijų duoda transcendentinį rezultatą, kai pateikiami racionalūs nenuliniai argumentai; todėl tokias funkcijas visada galima teisingai apvalinti. Tačiau tam tikro tikslumo ribos nustatymas, kaip tiksliai reikia apskaičiuoti rezultatus, kad būtų galima garantuoti teisingai suapvalintą rezultatą, gali pareikalauti daug skaičiavimo laiko.

Dabar yra keletas paketų, kurie siūlo visišką tikslumą. MPFR paketas pateikia teisingai suapvalintus bet kokio tikslumo rezultatus. IBM sukūrė paketą, skirtą greitoms ir tikslioms IEEE elementariosioms funkcijoms, o ateityje standartinės bibliotekos gali pasiūlyti tokį tikslumą.

Galima sukurti gerai apibrėžtus skaičiuojamuosius skaičius, kurių niekada nepavyks teisingai suapvalinti, kad ir kiek skaitmenų būtų apskaičiuota. Pavyzdžiui, jei Goldbacho prielaida teisinga, bet neįrodoma, tada neįmanoma teisingai suapvalinti 0,5 + 10-n, kur n yra pirmas lyginis skaičius, didesnis už 4, kuris nėra dviejų pirminių skaičių suma, arba 0,5, jei tokio skaičiaus nėra. Tačiau tai galima aproksimuoti bet kokiu tikslumu, net jei prielaida neįrodoma.

Istorija

Apvalinimo sąvoka yra labai sena, galbūt net senesnė už dalybos sąvoką. Kai kuriose senovinėse Mesopotamijoje rastose molinėse lentelėse pateiktos lentelės, kuriose suapvalintos atvirkštinių ir kvadratinių šaknų reikšmės, išreikštos 60 pagrindu. Suapvalintos apytikslės π, metų ir mėnesio ilgio reikšmės taip pat yra senos.

Nuo 1940 m. apvalios ir lygios vertės metodas yra ASTM (E-29) standartas. Terminų "nešališkas apvalinimas" ir "statistinis apvalinimas" kilmė yra gana aiški. 1906 m. 4-ajame "Tikimybių ir klaidų teorijos" leidime Robertas Simpsonas Vudvardas (Robert Simpson Woodward) šį metodą pavadino "kompiuterio taisykle", nurodydamas, kad tuo metu jis buvo plačiai naudojamas žmonių kompiuterių, kurie skaičiavo matematines lenteles. Čerčilio Eizenharto 1947 m. straipsnyje "Duomenų apvalinimo arba grupavimo poveikis" (Selected Techniques of Statistical Analysis, McGrawHill, 1947, Eisenhart, Hastay ir Wallis, redaktoriai) nurodyta, kad ši praktika jau buvo "gerai įsitvirtinusi" duomenų analizėje.

Sąvokos "bankininkų apvalinimas" kilmė lieka labiau neaiški. Jei šis apvalinimo metodas kada nors buvo bankininkystės standartas, įrodymų rasti labai sunku. Priešingai, Europos Komisijos ataskaitos "Euro įvedimas ir valiutinių sumų apvalinimas" 2 skyriuje teigiama, kad anksčiau bankininkystėje nebuvo jokio standartinio apvalinimo metodo; jame nurodoma, kad "pusinės" sumos turėtų būti apvalinamos į didesnę pusę.

Iki aštuntojo dešimtmečio slankiojo kablelio aritmetikoje naudojamas apvalinimo metodas paprastai buvo nustatytas aparatinėje įrangoje, buvo prastai dokumentuotas, nenuoseklus ir skirtingas kiekvienai kompiuterio markei ir modeliui. Situacija pasikeitė po to, kai dauguma kompiuterių gamintojų priėmė IEEE 754 slankiojo kablelio standartą. Standartas leidžia vartotojui pasirinkti vieną iš kelių apvalinimo režimų ir kiekvienu atveju tiksliai nurodo, kaip turėtų būti apvalinami rezultatai. Dėl šių savybių skaitiniai skaičiavimai tapo labiau nuspėjami ir nepriklausomi nuo mašinos, be to, tapo įmanoma veiksmingai ir nuosekliai įgyvendinti intervalinę aritmetiką.

Apvalinimo funkcijos programavimo kalbose

Daugumoje programavimo kalbų pateikiamos funkcijos arba speciali sintaksė, leidžianti įvairiais būdais apvalinti trupmeninius skaičius. Pirmosiose skaičių kalbose, pavyzdžiui, FORTRAN ir C, buvo numatytas tik vienas būdas, paprastai sutrumpinimas (link nulio). Šis numatytasis metodas galėjo būti numanomas tam tikromis aplinkybėmis, pavyzdžiui, priskiriant trupmeninį skaičių sveikojo skaičiaus kintamajam arba naudojant trupmeninį skaičių kaip masyvo indeksą. Kitus apvalinimo būdus reikėjo aiškiai užprogramuoti, pavyzdžiui, teigiamo skaičiaus apvalinimas iki artimiausio sveikojo skaičiaus galėjo būti įgyvendintas pridedant 0,5 ir sutrumpinant.

Tačiau pastaraisiais dešimtmečiais daugumos kalbų sintaksėje ir (arba) standartinėse bibliotekose paprastai pateikiamos bent keturios pagrindinės apvalinimo funkcijos (aukštyn/aukštyn, žemyn/žemyn, iki artimiausio ir link nulio). Lygiųjų skaičių laužymo metodas gali skirtis priklausomai nuo kalbos ir versijos ir (arba) gali būti pasirenkamas programuotojo. Kelios kalbos vadovaujasi IEEE-754 slankiojo kablelio standartu ir apibrėžia šias funkcijas kaip priimančias dvigubo tikslumo float argumentą ir grąžinančias to paties tipo rezultatą, kuris prireikus gali būti konvertuojamas į sveikąjį skaičių. Kadangi IEEE dvigubo tikslumo formatas turi 52 trupmeninius bitus, šis metodas gali padėti išvengti nepageidaujamų perpildymų kalbose, kuriose yra 32 bitų sveikieji skaičiai. Kai kuriose kalbose, pavyzdžiui, PHP, pateikiamos funkcijos, kurios suapvalina reikšmę iki nurodyto skaičiaus skaitmenų po kablelio, pavyzdžiui, nuo 4321,5678 iki 4321,57 arba 4300. Be to, daugelyje kalbų yra "printf" ar panaši eilutės formatavimo funkcija, kuri leidžia konvertuoti trupmeninį skaičių į eilutę, suapvalintą iki vartotojo nurodyto dešimtainiųjų skaitmenų skaičiaus (tikslumo). Kita vertus, daugelyje kalbų vis dar taikomas numatytasis apvalinimo metodas, ypač dalijant du sveikuosius skaičius.

Priešingai, CSS ir SVG neapibrėžia jokio konkretaus didžiausio tikslumo skaičiams ir matavimams, kurie jų dokumento objekto modelyje ir sąsajos aprašymo kalbos sąsajoje traktuojami ir pateikiami kaip eilutės, tarsi jie būtų begalinio tikslumo, ir neskiria sveikųjų skaičių ir slankiojo kablelio reikšmių; tačiau šių kalbų realizacijos paprastai konvertuoja šiuos skaičius į IEEE-754 dvigubą slankiojo kablelio reikšmę prieš pateikdamos apskaičiuotus skaitmenis su ribotu tikslumu (ypač standartinėse "Javascript" arba "ECMAScript" sąsajos sąsajose).

Kiti apvalinimo standartai

Kai kurios disciplinos ar institucijos yra paskelbusios apvalinimo standartus ar direktyvas.

JAV orų stebėjimai

1966 m. viduryje paskelbtose gairėse JAV federalinio meteorologijos koordinatoriaus biuras nustatė, kad meteorologiniai duomenys turėtų būti apvalinami iki artimiausio apvalaus skaičiaus, taikant lygiųjų skaičių suapvalinimo iki pusės taisyklę. Pavyzdžiui, 1,5, suapvalintas iki sveikojo skaičiaus, turėtų tapti 2, o -1,5 - -1. Iki tos datos lygiųjų skaičiavimo taisyklė buvo "suapvalinti pusę nuo nulio".

Neigiamas nulis meteorologijoje

Kai kurie meteorologai gali rašyti "-0", norėdami nurodyti temperatūrą nuo 0,0 iki -0,5 laipsnio (be išimties), kuri buvo suapvalinta iki sveikojo skaičiaus. Šis užrašas vartojamas, kai neigiamas ženklas laikomas svarbiu, nesvarbu, koks mažas būtų dydis; pavyzdžiui, apvalinant temperatūrą pagal Celsijaus skalę, kai žemiau nulio reiškia užšalimą. []

Susiję puslapiai

Klausimai ir atsakymai

Klausimas: Ką reiškia žodis "apvalinimas"?


A: Apvalinimas - tai skaitinės vertės pakeitimas kita verte, kuri yra apytiksliai tokia pati, bet trumpesnė, paprastesnė ar aiškesnė.

K: Koks yra apvalinimo pavyzdys?


A: Apvalinimo pavyzdys galėtų būti 23,74 JAV dolerio suapvalinimas iki 24 JAV dolerių, dalmuo 312/937 suapvalinamas iki 1/3, o išraiška 2 {\displaystyle {\sqrt {2}}} suapvalinama iki 1,41.

K: Kodėl apvaliname skaičius?


A: Skaičius apvaliname, kad gautume vertę, kurią lengviau užrašyti ir tvarkyti nei pradinę. Tai taip pat gali būti daroma siekiant nurodyti apskaičiuoto skaičiaus tikslumą.

K: Kokios galimos apvalinimo problemos?


A: Dėl apvalinimo gali atsirasti tam tikra apvalinimo paklaida, o tam tikrais atvejais rezultatas gali tapti beprasmis dėl skaičiavimuose laikui bėgant susikaupusių klaidų. Be to, tiksliai apvalinti transcendentines matematines funkcijas gali būti sudėtinga, nes neįmanoma žinoti, kiek papildomų skaitmenų reikia apskaičiuoti, kad būtų galima iš anksto nuspręsti, ar apvalinti į didesnę, ar į mažesnę pusę.

Klausimas: Kaip apvalinimas susijęs su kvantavimu?


A: Apvalinimas turi daug panašumų su kvantavimu, kuris vyksta, kai fizikinius dydžius reikia užkoduoti skaičiais arba skaitmeniniais signalais.

AlegsaOnline.com - 2020 / 2023 - License CC3