Noapaļošana

Vārds "noapaļošana" attiecībā uz skaitlisko vērtību nozīmē tās aizstāšanu ar citu vērtību, kas ir aptuveni vienāda, bet kuras forma ir īsāka, vienkāršāka vai skaidrāka. Piemēram, 23,74 ASV dolārus var noapaļot līdz 24 ASV dolāriem, vai daļu 312/937 var noapaļot līdz 1/3, vai izteicienu 2 {\displaystyle {\sqrt {2}}}{\displaystyle {\sqrt {2}}} kā 1,41.

Noapaļošana bieži tiek veikta ar nolūku, lai iegūtu vērtību, kuru ir vieglāk rakstīt un apstrādāt nekā sākotnējo. To var darīt arī, lai norādītu aprēķinātā skaitļa precizitāti; piemēram, daudzumu, kas aprēķināts kā 123 456, bet par kuru ir zināms, ka tā precizitāte ir tikai dažu simtu vienību robežās, labāk norādīt kā "aptuveni 123 500".

No otras puses, noapaļošana var radīt nelielu noapaļošanas kļūdu rezultātā. Noapaļošana ir gandrīz neizbēgama daudzos aprēķinos, jo īpaši, dalot divus skaitļus ar veseliem skaitļiem vai ar fiksētu komata punkti; aprēķinot tādas matemātiskās funkcijas kā kvadrātsaknes, logaritmi un sinusus; vai izmantojot peldošākomata attēlojumu ar noteiktu zīmīgo ciparu skaitu. Aprēķinu secībā šīs noapaļošanas kļūdas parasti uzkrājas, un dažos "nepareizos" gadījumos tās var padarīt rezultātu bezjēdzīgu.

Precīza transcendentālo matemātisko funkciju noapaļošana ir sarežģīta, jo nevar iepriekš zināt, cik papildu ciparu ir jāaprēķina, lai noteiktu, vai noapaļot uz augšu vai uz leju. Šo problēmu sauc par "tabulas sastādītāja dilemmu" (turpmāk).

Noapaļošanai ir daudz līdzību ar kvantizāciju, kas notiek, kad fizikāli lielumi jākodē ar skaitļiem vai ciparu signāliem.

Noapaļošanas veidi

Tipiskas noapaļošanas problēmas ir šādas:

  • iracionāla skaitļa aproksimēšana ar daļu, piemēram, π ar 22/7;
  • daļskaitļa ar periodisku decimāldaļskaitļa izvērsumu aproksimēšana ar galīgo decimāldaļu, piemēram, 5/3 ar 1,6667;
  • racionāla skaitļa aizstāšana ar daļskaitli ar mazāku skaitītāju un saucēju, piemēram, 3122/9417 ar 1/3;
  • aizstājot decimāldaļskaitli ar skaitli ar mazāku ciparu skaitu, piemēram, 2,1784 dolāra ar 2,18 dolāra;
  • aizstājot decimālskaitli ar veselu skaitli ar vairāk nullēm, piemēram, 23 217 cilvēku ar 23 200 cilvēku; vai vispārīgi,
  • aizstāt vērtību ar noteiktā daudzkārtni, piemēram, 27,2 sekundes ar 30 sekundēm (15 reizinājums).

Noapaļošana līdz noteiktam pieaugumam

Visbiežāk sastopamais noapaļošanas veids ir noapaļošana līdz veselam skaitlim vai, vispārīgāk, līdz kāda pieauguma veselu skaitļu reizinājumam, piemēram, noapaļošana līdz veselām sekundes desmitdaļām, dolāra simtdaļām, veseliem 1/2 vai 1/8 collas reizinājumiem, veseliem desmitiem vai tūkstošiem utt..

Kopumā skaitļa x noapaļošana līdz reizinājumam ar kādu noteiktu pieaugumu m ietver šādas darbības:

  1. Sadaliet x ar m, lai rezultāts būtu y;
  2. Noapaļojiet y līdz veselam skaitlim, nosauciet to par q;
  3. Lai iegūtu noapaļoto vērtību z, reiziniet q ar m.

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\,}

Piemēram, noapaļojot x = 2,1784 dolāra līdz veseliem centiem (t. i., līdz 0,01 reizinājumam), aprēķina y = x/m = 2,1784/0,01 = 217,84, tad noapaļo y līdz veselam skaitlim q = 218 un visbeidzot aprēķina z = q×m = 218×0,01 = 2,18.

Noapaļojot līdz iepriekš noteiktam zīmīgo ciparu skaitam, inkrements m ir atkarīgs no noapaļojamā skaitļa (vai noapaļotā rezultāta) lieluma.

Pieaugums m parasti ir galīga daļa jebkurā skaitļu sistēmā, kas tiek izmantota skaitļu attēlošanai. Cilvēkiem parasti tā ir decimālskaitļu sistēma (t. i., m ir vesels skaitlis, kas reizināts ar 10 reizinājumu, piemēram, 1/1000 vai 25/100). Starpvērtībām, kas tiek saglabātas ciparu datoros, bieži vien izmanto bināro skaitļu sistēmu (m ir vesels skaitlis, kas reizināts ar 2 pakāpi).

Abstraktajai vienargumentu funkcijai "round()", kas no patvaļīgas reālās vērtības atgriež veselu skaitli, ir vismaz ducis dažādu konkrētu definīciju, kas aprakstītas sadaļā "Noapaļošana līdz veselam skaitlim". Abstraktā divu argumentu funkcija "round()" ir formāli definēta šeit, bet daudzos gadījumos tā tiek izmantota ar netiešo vērtību m = 1 kā inkrementu un tad reducējas uz līdzvērtīgu abstrakto viena argumenta funkciju, kurai arī ir ducis dažādu konkrētu definīciju.

Noapaļošana līdz veselam skaitlim

Visvienkāršākā noapaļošanas forma ir aizstāt patvaļīgu skaitli ar veselu skaitli. Visi turpmāk minētie noapaļošanas veidi ir abstraktās vienargumentu funkcijas "round()", kas aprakstīta un izmantota iepriekšējās sadaļās, konkrētas implementācijas.

Ir daudzi veidi, kā noapaļot skaitli y līdz veselam skaitlim q. Visbiežāk sastopamie ir šādi.

  • noapaļojiet uz leju (vai noapaļojiet līdz minimumam, vai noapaļojiet līdz mīnus bezgalībai): q ir lielākais veslais skaitlis, kas nepārsniedz 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 \,}

  • noapaļo uz augšu (vai ņem maksimumu, vai noapaļo uz plus bezgalību): q ir mazākais veslais skaitlis, kas nav mazāks par 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 \,}

  • noapaļot uz nulli (vai nogriezt, vai noapaļot prom no bezgalības): q ir y veselā skaitļa daļa bez frakcijas cipariem.

q = t r u n k ā t e ( y ) = sgn ( y ) | y | = - sgn ( y ) - | y | {\displaystyle q=\mathrm {truncate} (y)=\operatora nosaukums {sgn}(y)\left\lfloor \left|y\right|\right\rfloor =-\operatora nosaukums {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 \,}

  • noapaļot no nulles (vai noapaļot uz bezgalību): ja y ir vesels skaitlis, q ir y; citādi q ir vesels skaitlis, kas ir vistuvāk 0 un ir tāds, ka y ir starp 0 un q.

q = sgn ( y ) | y | = - sgn ( y ) - | y | {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|\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 \,}

  • noapaļot līdz tuvākajam: q ir veselais skaitlis, kas ir vistuvāk y (sk. tālāk par neizšķirtu sadalīšanas noteikumiem).

Pirmās četras metodes sauc par virzītu noapaļošanu, jo visi pārvietojumi no sākotnējā skaitļa y uz noapaļoto vērtību q ir virzīti uz vienu un to pašu robežvērtību (0, +∞ vai -∞) vai prom no tās.

Ja y ir pozitīvs, noapaļošana uz leju ir tas pats, kas noapaļošana uz nulli, bet noapaļošana uz augšu ir tas pats, kas noapaļošana no nulles. Ja y ir negatīvs, tad noapaļošana uz leju ir tas pats, kas noapaļošana prom no nulles, bet noapaļošana uz augšu ir tas pats, kas noapaļošana uz augšu pret nulli. Jebkurā gadījumā, ja y ir vesels skaitlis, q ir tikai y. Šīs noapaļošanas metodes ilustrētas nākamajā tabulā:

y

noapaļošana
(uz -∞)

apļveida apskate
(uz +∞)

noapaļot līdz nullei


no nulles

roundtonearest

+23.67

+23

+24

+23

+24

+24

+23.50

+23

+24

+23

+24

+23 vai +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 vai -24

−23.67

−24

−23

−23

−24

−24

Ja daudzi aprēķini tiek veikti secīgi, noapaļošanas metodes izvēle var ļoti būtiski ietekmēt rezultātu. Slavens piemērs bija saistīts ar jaunu indeksu, ko 1982. gadā izveidoja Vankūveras fondu birža. Sākotnēji indekss tika noteikts 1000 000, bet pēc 22 mēnešiem tas bija nokrities līdz aptuveni 520, lai gan akciju cenas šajā laikā kopumā bija pieaugušas. Problēma radās tāpēc, ka indekss tika pārrēķināts tūkstošiem reižu dienā un vienmēr noapaļots līdz 3 zīmēm aiz komata, tādējādi noapaļošanas kļūdas uzkrājās. Pārrēķinot ar labāku noapaļošanu, tā paša perioda beigās indeksa vērtība bija 1098,892 punkti.

Neizšķirtu noteikšana

Lai noapaļotu skaitli y līdz tuvākajam veselajam skaitlim, ir nepieciešams kāds neizšķirtu noteikums gadījumiem, kad y ir precīzi pusceļā starp diviem veselajiem skaitļiem, t. i., kad y daļskaitļa daļa ir precīzi 0,5.

Apkārt uz pusi uz augšu

Daudzās disciplīnās tiek plaši izmantots šāds neizšķirta noteikums, ko sauc par noapaļošanu līdz pusei (vai noapaļošanu līdz pusei plus bezgalība). Tas nozīmē, ka pusi no vērtības y vienmēr noapaļo uz augšu.

  • Ja y daļa ir tieši 0,5, tad 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 \,}

Piemēram, saskaņā ar šo noteikumu vērtība 23,5 tiek noapaļota līdz 24, bet -23,5 tiek noapaļota līdz -23.

Šis ir viens no diviem noteikumiem, ko parasti māca ASV pamatskolas matemātikas stundās. []

Ja nebūtu 0,5 daļas, noapaļošanas kļūdas, ko rada noapaļošanas līdz tuvākajam, būtu diezgan simetriskas: katrai daļai, kas tiek noapaļota uz augšu (piemēram, 0,268), ir papildu daļa (proti, 0,732), kas tiek noapaļota uz leju par tādu pašu summu. Noapaļojot lielu skaitļu kopu ar nejaušām daļskaitļu daļām, šīs noapaļošanas kļūdas statistiski kompensētu viena otru, un noapaļoto skaitļu paredzamā (vidējā) vērtība būtu vienāda ar sākotnējo skaitļu paredzamo vērtību.

Tomēr noapaļošanas līdz pusei uz augšu noteikums par neizšķirtu nav simetrisks, jo daļas, kas ir tieši 0,5, vienmēr tiek noapaļotas uz augšu. Šī asimetrija rada pozitīvu noapaļošanas kļūdu novirzi. Piemēram, ja daļskaitlis y sastāv no trim nejaušiem decimālcipariem, tad sagaidāmā vērtība q būs par 0,0005 lielāka nekā sagaidāmā vērtība y. Šā iemesla dēļ noapaļošanu līdz tuvākajam ar noapaļošanas uz pusi uz augšu noteikumu sauc arī (neviennozīmīgi) par asimetrisku noapaļošanu.

Viens no 0,5 noapaļošanas iemesliem ir tas, ka jāpārbauda tikai viens cipars. Piemēram, redzot skaitli 17,50000..., pirmie trīs cipari, 17,5, nosaka, ka skaitlis tiks noapaļots līdz 18 cipariem. Ja tiktu izmantots pretējs noteikums (noapaļošana uz pusi uz leju), tad, lai noteiktu, vai vērtība ir tieši 17,5, būtu jāpārbauda visas nulles zīmes aiz komata.

Apaļā puse uz leju

Var izmantot arī noapaļošanu uz pusi uz leju (vai noapaļošanu uz pusi uz mīnus bezgalību), nevis ierasto noapaļošanu uz pusi uz augšu (noapaļošana uz pusi uz augšu ir vispārpieņemta konvencija, bet tā nav nekas vairāk kā konvencija).

  • Ja y daļa ir tieši 0,5, tad 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 \,}

Piemēram, 23,5 noapaļo līdz 23, bet -23,5 noapaļo līdz -24.

Noapaļošana uz pusēm uz leju, lai panāktu neizšķirtu, nav simetriska, jo tās daļas, kas ir tieši 0,5, vienmēr tiek noapaļotas uz leju. Šī asimetrija rada negatīvu noapaļošanas kļūdu novirzi. Piemēram, ja daļskaitlis y sastāv no trim nejaušiem decimālcipariem, tad sagaidāmā vērtība q būs par 0,0005 mazāka nekā sagaidāmā vērtība y. Šā iemesla dēļ noapaļošanu līdz tuvākajam ar noapaļošanas uz pusi uz leju noteikumu sauc arī par (neviennozīmīgi) asimetrisku noapaļošanu.

Noapaļot pusi no nulles

Otra metode, ko parasti māca un izmanto, ir noapaļošana uz pusi no nulles (vai noapaļošana uz bezgalību), proti:

  • Ja y daļa ir tieši 0,5, tad q = y + 0,5, ja y ir pozitīvs, un q = y - 0,5, ja y ir negatīvs.

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 \,}

Piemēram, 23,5 noapaļo līdz 24, bet -23,5 noapaļo līdz -24.

Šī metode pozitīvas un negatīvas vērtības apstrādā simetriski, un tāpēc tā ir brīva no vispārējas novirzes, ja sākotnējie skaitļi ir pozitīvi vai negatīvi ar vienādu varbūtību. Tomēr šis noteikums joprojām radīs pozitīvu novirzi pozitīviem skaitļiem un negatīvu novirzi negatīviem skaitļiem.

To bieži izmanto valūtas konvertēšanai un cenu noapaļošanai (kad summa vispirms tiek konvertēta valūtas mazākajā nozīmīgajā apakšdaļā, piemēram, eiro centos), jo to ir viegli izskaidrot, ņemot vērā tikai pirmo daļskaitli, neatkarīgi no papildu precizitātes cipariem vai summas zīmes (lai nodrošinātu stingru ekvivalenci starp summas maksātāju un saņēmēju).

Noapaļojiet pusi uz nulli

Var arī noapaļot pusi uz nulli (vai noapaļot pusi no bezgalības), nevis noapaļot pusi prom no nulles (metode "noapaļot pusi prom no nulles" ir vispārpieņemta konvencija, bet tā ir tikai konvencija).

  • Ja y daļa ir tieši 0,5, tad q = y - 0,5, ja y ir pozitīvs, un q = y + 0,5, ja y ir negatīvs.

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 \,}

Piemēram, 23,5 noapaļo līdz 23, bet -23,5 noapaļo līdz -23.

Šī metode arī pozitīvas un negatīvas vērtības apstrādā simetriski, un tāpēc tā ir brīva no vispārējas novirzes, ja sākotnējie skaitļi ir pozitīvi vai negatīvi ar vienādu varbūtību. Tomēr šis noteikums joprojām radīs negatīvu novirzi pozitīviem skaitļiem un pozitīvu novirzi negatīviem skaitļiem.

Noapaļojiet pusi līdz pat

Vēl mazāk neobjektīvs neizšķirta noteikums ir noapaļot līdz pusei, proti.

  • Ja y daļa ir 0,5, tad q ir pāra skaitlis, kas ir vistuvāk y.

Tādējādi, piemēram, +23,5 kļūst par +24, +22,5 kļūst par +22, -22,5 kļūst par -22 un -23,5 kļūst par -24.

Šī metode arī pozitīvas un negatīvas vērtības apstrādā simetriski, un tāpēc tā ir brīva no vispārējas novirzes, ja sākotnējie skaitļi ir pozitīvi vai negatīvi ar vienādu varbūtību. Turklāt lielākajai daļai saprātīgu y vērtību sadalījumu noapaļoto skaitļu sagaidāmā (vidējā) vērtība būtībā ir tāda pati kā sākotnējiem skaitļiem, pat ja tie visi ir pozitīvi (vai visi negatīvi). Tomēr šis noteikums joprojām radīs pozitīvu novirzi pāra skaitļiem (ieskaitot nulli) un negatīvu novirzi nepāra skaitļiem.

Šo noapaļošanas līdz tuvākajam variantu sauc arī par objektīvu noapaļošanu (divdomīgi un nedaudz ļaunprātīgi), konverģentu noapaļošanu, statistikas noapaļošanu, holandiešu noapaļošanu, Gausa noapaļošanu vai baņķieru noapaļošanu. To plaši izmanto grāmatvedībā.

Šis ir noklusējuma noapaļošanas režīms, ko izmanto IEEE 754 skaitļošanas funkcijās un operatoros.

Noapaļojiet pusi līdz nepāra

Vēl viens neizšķirta noteikums, kas ir ļoti līdzīgs noteikumam, ka pusi no kārtas līdz pulkam, proti.

  • Ja y daļa ir 0,5, tad q ir nepāra vesels skaitlis, kas ir vistuvāk y.

Tādējādi, piemēram, +22,5 kļūst par +23, +21,5 kļūst par +21, -21,5 kļūst par -21 un -22,5 kļūst par -23.

Šī metode arī pozitīvas un negatīvas vērtības apstrādā simetriski, un tāpēc tā ir brīva no vispārējas novirzes, ja sākotnējie skaitļi ir pozitīvi vai negatīvi ar vienādu varbūtību. Turklāt lielākajai daļai saprātīgu y vērtību sadalījumu noapaļoto skaitļu sagaidāmā (vidējā) vērtība būtībā ir tāda pati kā sākotnējiem skaitļiem, pat ja tie visi ir pozitīvi (vai visi negatīvi). Tomēr šis noteikums joprojām radīs negatīvu novirzi pāra skaitļiem (ieskaitot nulli) un pozitīvu novirzi nepāra skaitļiem.

Šo variantu gandrīz nekad neizmanto vairumā aprēķinu, izņemot situācijas, kad vēlas izvairīties no 0,5 vai -0,5 noapaļošanas līdz nullei vai izvairīties no to skaitļu skalas palielināšanas, kas attēloti kā skaitļi ar peldošo komatu (ar ierobežotiem mērogošanas eksponenta diapazoniem), lai skaitlis, kas nav bezgalīgs, tiktu noapaļots līdz bezgalīgam skaitlim vai lai maza denormāla vērtība tiktu noapaļota līdz normālai nenulles vērtībai (tas varētu notikt, izmantojot noapaļošanas režīmu noapaļot pusi līdz pāra). Faktiski šis režīms dod priekšroku esošās skalas saglabāšanai, ja iespējams, izvairoties no rezultātiem ārpus diapazona.

Stohastiskā noapaļošana

Vēl viena objektīvā neizšķirtu sadalīšanas metode ir stohastiskā noapaļošana:

  • Ja daļskaitļa y daļa ir 0,5, ar vienādu varbūtību nejauši izvēlieties q no y + 0,5 un y - 0,5.

Līdzīgi kā noapaļošana līdz pāra skaitlim, arī šis noteikums būtībā ir bez vispārējas novirzes, taču tas ir taisnīgs arī starp pāra un nepāra q vērtībām. No otras puses, tas ievieš nejaušības komponentu rezultātos; veicot vienu un to pašu aprēķinu divreiz ar vieniem un tiem pašiem datiem, var iegūt divus atšķirīgus rezultātus. Turklāt tā ir pakļauta neapzinātai neobjektivitātei, ja cilvēki (nevis datori vai nejaušības ierīces) "nejauši" izlemj, kurā virzienā noapaļot.

Izmaiņu neizšķirtu noteikšana

Viena no metodēm, kas ir neskaidrāka nekā lielākā daļa, ir pārmaiņus apļveida puse.

  • Ja daļskaitļa daļa ir 0,5, pārmaiņus noapaļojiet uz augšu un uz leju: ja daļskaitļa daļa ir 0,5, pirmo reizi noapaļojiet uz augšu, otro reizi noapaļojiet uz leju un tā tālāk.

Tas nomāc rezultāta nejaušo komponentu, ja var efektīvi numurēt 0,5 daļskaitļu gadījumus. Taču tas joprojām var radīt pozitīvu vai negatīvu novirzi atkarībā no pirmajam gadījumam piešķirtā noapaļošanas virziena, ja kopējais gadījumu skaits ir nepāra.

Vienkārša dīteringa funkcija

Dažos gadījumos visas iepriekš minētās noapaļošanas metodes var būt neapmierinošas. Piemēram, pieņemsim, ka y ir precīzs audio signāla mērījums, kas tiek noapaļots līdz veselam skaitlim q, lai samazinātu glabāšanas vai pārraides izmaksas. Ja y ar laiku mainās lēni, jebkuras no iepriekš minētajām noapaļošanas metodēm rezultātā q būs pilnīgi nemainīgs ilgu intervālu laikā, ko atdalīs pēkšņi lēcieni ±1. Kad q signāls tiks atskaņots, šie soļi būs dzirdami kā ļoti nepatīkams troksnis, un jebkādas sākotnējā signāla variācijas starp divām veselām vērtībām tiks pilnībā zaudētas.

Viens no veidiem, kā izvairīties no šīs problēmas, ir noapaļot katru vērtību y uz augšu ar varbūtību, kas vienāda ar tās daļu, un noapaļot to uz leju ar šīs varbūtības papildinājumu. Piemēram, skaitli 23,17 noapaļotu uz augšu līdz 24 ar varbūtību 0,17 un uz leju līdz 23 ar varbūtību 1 - 0,17 = 0,83. (Tas ir līdzvērtīgi noapaļošanai uz leju y + s, kur s ir nejaušs skaitlis, kas vienmērīgi sadalīts starp 0 un 1.) Izmantojot šo īpašo noapaļošanu, ko sauc par ditheringu, pēkšņie soļi tiek aizstāti ar mazāk nepatīkamu troksni, un zināmā mērā saglabājas pat nelielas sākotnējā signāla variācijas. Līdzīgi kā stohastiskajai pieejai neizšķirtu sadalīšanai, arī ditheringam nav neobjektivitātes: ja visas daļskaitļu vērtības ir vienlīdz ticamas, noapaļošana uz augšu par noteiktu skaitli ir tikpat ticama kā noapaļošana uz leju par to pašu skaitli; tas pats attiecas uz vairāku noapaļoto skaitļu summu. No otras puses, dithering ievieš nejaušības komponentu rezultātos, kas ir daudz lielāks nekā stohastiskā neizšķirtu sadalījuma gadījumā.

Precīzāk, noapaļošanas kļūda katram diterētajam skaitlim būs vienmērīgi sadalīts nejaušs lielums ar vidējo vērtību nulle, bet ar standartnovirzi 1 / 12 ≈ 0,2886 {\displaystyle 1/{\sqrt {12}}}aprox 0,2886}. {\displaystyle 1/{\sqrt {12}}\approx 0.2886}, kas ir labāka nekā 1/2 standartnovirze ar vienkāršām prognozēšanas metodēm, bet nedaudz lielāka nekā ar vienkāršāku stohastisko metodi. Tomēr n noapaļotu skaitļu summa būs nejaušs lielums ar sagaidāmo kļūdu nulle, bet ar standartnovirzi n / 12 {\displaystyle {\sqrt {n}}}/{\sqrt {12}}}}. {\displaystyle {\sqrt {n}}/{\sqrt {12}}}(kopējais atlikušais troksnis), kas puskvadrātiski novirzās un var kļūt viegli uztverama, pat ja noapaļošanas kļūdas standartnovirze uz vienu paraugu būs 1 / 12 n {\displaystyle 1/{{\sqrt {12n}}}{\displaystyle 1/{\sqrt {12n}}}, kas lēni puskvadrātiski konverģē pie nulles. Tātad šis nejaušais sadalījums joprojām var būt pārāk liels dažām lietojumprogrammām, kurās tiek noapaļots liels datu daudzums.

Daudzdimensiju dithering

Šis vienkāršās ditheringa metodes variants joprojām noapaļo vērtības ar varbūtību, kas vienāda ar tās daļu. Tomēr tā vietā, lai noapaļojot izolētus paraugus izmantotu nejaušo sadalījumu, noapaļošanas kļūda, kas rodas katrā noapaļotajā paraugā, tiek summēta nākamajiem apkārtējiem elementiem, kurus paredzēts noapaļot vai aprēķināt; šo uzkrāto vērtību pēc tam pievieno šo nākamo noapaļojamo vai aprēķināmo vērtību vērtībai, lai modificētajās vērtībās tiktu ņemta vērā šī starpība, izmantojot prognozēšanas modeli (piemēram, Floida-Steinberga noapaļošanu).

Modificētās vērtības pēc tam noapaļo ar jebkuru no iepriekš minētajām noapaļošanas metodēm, bet vislabākās ir stohastiskā vai ditheringa metodes: pēdējā gadījumā n noapaļoto skaitļu summa joprojām būs nejaušs lielums ar sagaidāmo kļūdu nulle, bet ar lielisku konstantu standartnovirzi 1/12 {\displaystyle 1/{\sqrt {12}}}. {\displaystyle 1/{\sqrt {12}}}tā vietā, lai puskvadrātiski novirzītos, kad tiek noapaļoti izolēti paraugi; un kopējā vidējā noapaļošanas kļūdas novirze uz noapaļoto paraugu būs 1 / ( n 12 ) {\displaystyle 1/(n{{\sqrt {12}}})}, {\displaystyle 1/(n{\sqrt {12}})}kas hiperboliski konverģē pie nulles ātrāk nekā ar pushiperbolisko konverģenci, kad tiek noapaļoti izolēti paraugi.

Praksē, noapaļojot lielas paraugu datu kopas (piemēram, audio, attēlu un video atveidē), noapaļošanas kļūdu uzkrāšanu visbiežāk izmanto ar modificēto vērtību vienkāršu prognozējošu noapaļošanu (piemēram, noapaļošanu uz nulli), jo tā joprojām saglabā kopējās vidējās noapaļošanas kļūdas novirzes un tās standartnovirzes hiperbolisko konverģenci uz nulli. Šo uzlabojumu bieži izmanto attēlu un audio apstrādē (jo īpaši precīzai pārmērošanai un izlīdzināšanas novēršanai, kur izolētu vērtību vienkārša varbūtiska noapaļošana joprojām var radīt jūtamu troksni, dažkārt pat sliktāku nekā moirē efekts, kas rodas, ja izolētiem paraugiem piemēro vienkāršas, neprobilances noapaļošanas metodes).

Uzkrāto noapaļošanas kļūdu efektīva izplatīšanās var būt atkarīga no noapaļojamo datu diskrētās dimensijas: ja tiek veikta divdimensiju attēlu, tostarp krāsainu attēlu (kas pievieno krāsu plakņu diskrēto dimensiju), vai trīsdimensiju video (kas pievieno diskrēto laika dimensiju), vai polifonisku audio datu (izmantojot laika un kanālu diskrētās dimensijas) paraugu ņemšana, var būt vēlams šo kļūdu izplatīt vēlamajā virzienā vai vienlīdzīgi vairākās ortogonālās dimensijās, piemēram, vertikāli pret. horizontāli divdimensiju attēliem vai paralēlos krāsu kanālos tajā pašā pozīcijā un/vai laika zīmogā, un atkarībā no citām šo ortogonālo diskrēto dimensiju īpašībām (saskaņā ar uztveres modeli). Šādos gadījumos var izmantot vairākus noapaļošanas kļūdas akumulatorus (vismaz vienu katrai diskrētajai dimensijai) vai (n-1)-dimensiju akumulatoru vektoru (vai matricu).

Dažos no šiem gadījumiem diskrētās datu dimensijas, ko paredzēts atlasīt un noapaļot, var apstrādāt neortogonāli: Piemēram, strādājot ar krāsainiem attēliem, trihromatiskās krāsu plaknes datus katrā fiziskajā dimensijā (augstums, platums un pēc izvēles arī laiks) varētu pārplānot, izmantojot uztverošo krāsu modeli, lai noapaļošanas kļūdu akumulatori tiktu veidoti tā, lai saglabātu gaišumu ar lielāku varbūtību nekā nokrāsu vai piesātinājumu, nevis izplatītu kļūdas katrā ortogonālajā krāsu plaknē atsevišķi; un stereofona audio datos abus noapaļotos datu kanālus (kreiso un labo) var noapaļot kopā, lai saglabātu to vidējo vērtību, dodot priekšroku to efektīvajai starpībai, kas absorbēs lielāko daļu atlikušo noapaļošanas kļūdu līdzsvarotā veidā ap nulli.

Noapaļošana līdz vienkāršām daļām

Dažos gadījumos ir vēlams noapaļot doto skaitli x līdz "tīrai" daļai, t. i., tuvākajai daļai z = m/n, kuras skaitītājs m un saucējs n nepārsniedz noteiktu maksimumu. Šī problēma ir diezgan atšķirīga no vērtības noapaļošanas līdz fiksētam decimālciparu vai bināro ciparu skaitlim vai līdz dotās vienības m reizinājumam. Šī problēma ir saistīta ar Fareja sekvencēm, Sterna-Broko koku un turpināmajām frakcijām.

Mēroga noapaļošana

Šis noapaļošanas veids, ko sauc arī par noapaļošanu logaritmiskā mērogā, ir noapaļošanas līdz noteiktam pieaugumam variants, bet ar pieaugumu, kas tiek mainīts atkarībā no rezultāta mēroga un lieluma. Konkrēti, mērķis ir ierobežot zīmīgo ciparu skaitu, noapaļojot vērtību tā, ka nenozīmīgie cipari tiek izlaisti. Šāda veida noapaļošana netieši notiek ar skaitļiem, kas aprēķināti ar peldošā komata vērtībām ar ierobežotu precizitāti (piemēram, IEEE-754 float un double tipi), bet to var izmantot vispārīgāk, lai noapaļotu jebkuras reālās vērtības ar jebkuru pozitīvu zīmīgo ciparu skaitu un jebkuru stingri pozitīvu reālo bāzi.

Piemēram, to var izmantot inženiergrafikā, lai attēlotu datus ar logaritmisko skalu ar mainīgiem soļiem (piemēram, viļņu garumu, kuru bāze ne vienmēr ir vesels skaitlis), vai statistikas datos, lai definētu reālo vērtību klases intervālos ar eksponenciāli pieaugošu platumu (bet visbiežāk to izmanto ar veselu skaitļu bāzēm, piemēram, 10 vai 2). [avots? ]

Šis noapaļošanas veids balstās uz logaritmisko skalu, ko nosaka fiksēts nenulles reāls mēroga koeficients s (visbiežāk šis koeficients ir s=1) un fiksēta pozitīva bāze b>1 (ne vienmēr vesels skaitlis un visbiežāk atšķiras no mēroga koeficienta), kā arī fiksēts vesels skaitlis n>0 zīmīgo ciparu šajā bāzē (kas nosaka noapaļošanai izmantojamā pieauguma vērtību un noapaļotā skaitļa aprēķināto efektīvo skalu).

Sākotnējais argumenta skaitlis (kā arī iegūtais noapaļotais skaitlis) vispirms tiek attēlots eksponenciālā rakstā x = s-a-m-bc, kur zīme s ir +1 vai -1, absolūtā mantisa a ir ierobežota ar pusatvērto pozitīvo intervālu [1/b,1), bet eksponents c ir jebkurš (pozitīvs vai negatīvs) vesels skaitlis. Šādā attēlojumā visi zīmīgie cipari ir absolūtās mantisas frakcionālajā daļā, kuras veselā daļa vienmēr ir nulle.

Ja avota skaitlis (vai noapaļots skaitlis) ir 0, absolūtā mantisa a ir definēta kā 0, bet eksponentam c ir noteikta patvaļīga vērtība (lielākajā daļā konvenciju - 0, bet dažās peldošā saskaitāmpunkta atveidēs nevar izmantot nulles absolūto mantisu, bet tiek rezervēta īpaša maksimāli negatīva eksponentam c vērtība, lai atveidotu pašu skaitli 0), un zīmi s var patvaļīgi izvēlēties starp -1 vai +1 (parasti to nosaka +1 vienkāršas nulles gadījumā vai arī to nosaka ar tādu pašu zīmi kā argumentam noapaļotajā vērtībā, ja skaitļa attēlojums ļauj atšķirt pozitīvas un negatīvas nulles, pat ja tās galu galā pārstāv vienu un to pašu skaitlisko vērtību 0).

Kā ekvivalentu var izmantot arī mērogotu eksponenciālu attēlojumu x = a-s-bc, kura parakstītā mantisa a ir vai nu vienāda ar nulli, vai arī atrodas vienā no diviem pusatvērtajiem intervāliem (-1,-1/b] un [+1/b,+1), un tas tiks izmantots turpmāk aprakstītajā algoritmā.

Lai aprēķinātu šo mērogo noapaļošanu, parasti tiek veiktas šādas darbības:

  1. ja x ir vienāds ar nulli, vienkārši atgrieziet x; pretējā gadījumā:
  2. pārvērš x mērogotā eksponenciālā attēlojumā ar parakstītu mantisu:
    x = a
    s b c {\displaystyle x=a\cdot s\cdot b^{c}\,} {\displaystyle x=a\cdot s\cdot b^{c}\,}
    1. ļaujiet x' būt x vērtība bez mērogošanas, dalot to ar mērogošanas koeficientu s:
      x ′ = x / s {\displaystyle x'=x/s\,}
      {\displaystyle x'=x/s\,} ;
    2. lai mērogošanas eksponents c ir viens plus x' absolūtās vērtības bāziskais logaritms, noapaļots uz leju līdz veselam skaitlim (virzienā uz mīnus bezgalību):
      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. lai parakstītā mantisa a ir reizinājums x', kas dalīts ar b līdz lielumam 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. aprēķināt noapaļoto vērtību šajā attēlojumā:
    1. lai c' ir x' sākotnējais mērogošanas eksponents c:
      c ′ = c {\displaystyle c'=c\,}
      {\displaystyle c'=c\,}
    2. ļaujiet m būt mantisas a noapaļošanas inkrementam atkarībā no saglabājamo zīmīgo ciparu skaita:
      m = b - n {\displaystyle m=b^{-n}\,}
      {\displaystyle m=b^{-n}\,}
    3. lai a' ir parakstītā mantisa a, kas noapaļota atbilstoši šim pieaugumam m un izvēlētajam noapaļošanas režīmam:
      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. ja a' absolūtā vērtība nav mazāka par b, tad samaziniet n (reiziniet inkrementu m ar b), palieliniet mērogošanas eksponentu c', daliet parakstīto mantisu a ar b un no jauna sāciet jaunās parakstītās mantisas a noapaļošanu līdz a', izmantojot to pašu formulu; no šī soļa var izvairīties tikai tad, ja abtract "round()" funkcija vienmēr noapaļo a uz 0 (t. i.t.i., ja tā ir vienkārša saīsināšana), bet ir nepieciešama, ja tā var noapaļot a uz bezgalību, jo noapaļotajai mantisai šajā gadījumā var būt lielāks mērogošanas eksponents, atstājot papildu precizitātes ciparu.
  4. atgriezt noapaļoto vērtību:
    y = s k 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}\,} .

Abstraktajai funkcijai "round()" šāds noapaļošanas veids var izmantot jebkuru no nākamajā nodaļā sīkāk aprakstītajiem noapaļošanas uz veseliem skaitļiem veidiem, taču visbiežāk tiek izmantots noapaļošanas uz tuvāko (ar neizšķirtu sadalīšanas noteikumiem, kas arī sīkāk aprakstīti tālāk).

Piemēram:

  • mērogotais noapaļojums 1,234 ar mērogošanas koeficientu 1 ar bāzi 10 un 3 zīmīgajiem cipariem (maksimālā relatīvā precizitāte=1/1000), izmantojot jebkuru noapaļošanas līdz tuvākajam režīmam, dos 1,23;
  • līdzīga mērogošana noapaļojot 1,236 dos 1,24;
  • līdzīgi noapaļojot 21,236, tiks iegūta vērtība 21,2;
  • līdzīgi noapaļojot 321,236, iegūsiet 321;
  • noapaļojot 1,234 ar mērogošanas koeficientu 1 ar bāzi 10 un 3 zīmīgajiem cipariem (maksimālā relatīvā precizitāte=1/1000), izmantojot noapaļošanas uz leju režīmu, tiks iegūta vērtība 1,23;
  • līdzīga mēroga noapaļošana no 1,236 arī atgriezīs 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}} ar mērogošanas koeficientu π {\displaystyle \scriptstyle \pi }{\displaystyle \scriptstyle \pi } 2. bāzē un 3 zīmīgajiem cipariem (maksimālā relatīvā precizitāte = 1/8), izmantojot noapaļošanas režīmu, tiks iegūta 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};
  • līdzīga mēroga noapaļošana 5 π / 7 ≈ 5,7143 π 2 - 3 {\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}}{\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}} atgriezīs 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} ;
  • līdzīgs mērogotais noapaļojums π / 7 ≈ 4,5714 π 2 - 5 {\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}} atgriezīs 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • līdzīgs π / 8 = 4 π 2 - 5 {\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}} arī atgriezīs 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • līdzīgs mērogotais noapaļojums π / 15 ≈ 4,2667 π 2 - 6 {\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}}{\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}} atgriezīs 4 π 2 - 6 = π / 16 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}. {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}.

Noapaļot līdz pieejamai vērtībai

Gatavus zāģmateriālus, rakstāmpapīru, kondensatorus un daudzus citus izstrādājumus parasti pārdod tikai dažos standarta izmēros.

Daudzās projektēšanas procedūrās ir aprakstīts, kā aprēķināt aptuvenu vērtību un pēc tam "noapaļot" līdz kādam standarta lielumam, izmantojot tādas frāzes kā "noapaļot uz leju līdz tuvākajai standarta vērtībai", "noapaļot uz augšu līdz tuvākajai standarta vērtībai" vai "noapaļot līdz tuvākajai standarta vērtībai".

Ja vēlamo vērtību kopums ir vienādi izvietots logaritmiskā skalā, jebkuras vērtības tuvākās vēlamās vērtības izvēli var uzskatīt par sava veida noapaļošanu. Šādas "noapaļotas" vērtības var tieši aprēķināt.

Noapaļošana ar peldošo skaitli

Aritmētikā ar peldošo komatspunktu noapaļošanas mērķis ir pārvērst doto vērtību x vērtībā z ar noteiktu zīmīgo ciparu skaitu. Citiem vārdiem sakot, z ir jābūt skaitļa m reizinājumam, kas atkarīgs no z lieluma. skaitlis m ir peldošā komata formas bāzes (parasti 2 vai 10) lielums.

Izņemot šo sīkumu, visi iepriekš aplūkotie noapaļošanas varianti attiecas arī uz skaitļu ar peldošo komatspunktu noapaļošanu. Šādas noapaļošanas algoritms ir aprakstīts iepriekš iedaļā Par mērogotu noapaļošanu, bet ar konstantu mērogošanas koeficientu s=1 un veselu skaitļu bāzi b>1.

Rezultātiem, kuru noapaļotais rezultāts varētu pārplūst, rezultāts virzītajam noapaļošanai ir vai nu attiecīgā parakstītā bezgalība, vai arī lielākais pārstāvamais pozitīvais galīgais skaitlis (vai mazākais pārstāvamais negatīvais galīgais skaitlis, ja x ir negatīvs) atkarībā no noapaļošanas virziena. Pārplūdes rezultāts parastā noapaļošanas gadījumā vienmēr ir attiecīgā bezgalība.

Turklāt, ja noapaļotais rezultāts būtu nepietiekams, t. i., ja. ja eksponents pārsniegtu mazāko reprezentējamo veselā skaitļa vērtību, efektīvais rezultāts var būt vai nu nulle (iespējams, parakstīta, ja attēlojums var saglabāt zīmju atšķirību nullei), vai mazākais reprezentējamais pozitīvais galīgais skaitlis (vai lielākais reprezentējamais negatīvais galīgais skaitlis, ja x ir negatīvs), iespējams, denormāls pozitīvs vai negatīvs skaitlis (ja mantisa saglabā visus nozīmīgos ciparus, šādā gadījumā visnozīmīgāko ciparu joprojām var saglabāt zemākā pozīcijā, nosakot augstāko saglabāto ciparu nulli, un šī saglabātā mantisa nesamazina visnozīmīgāko ciparu, kas ir iespējams, ja bāze b = 2, jo šajā bāzē visnozīmīgākais cipars vienmēr ir 1), atkarībā no noapaļošanas virziena. Parastā noapaļošanas līdz pāra rezultātam rezultāts vienmēr ir atbilstošā nulle.

Dubultā noapaļošana

Ja skaitli noapaļo divas reizes pēc kārtas ar dažādu precizitāti, turklāt pēdējā precizitāte ir rupjāka, nav garantēts, ka rezultāts būs tāds pats kā noapaļojot vienu reizi ar galīgo precizitāti, izņemot virzītas noapaļošanas gadījumā. Piemēram, noapaļojot 9,46 līdz vienai decimālzīmei aiz komata, iegūst 9,5 un pēc tam 10, noapaļojot līdz veselam skaitlim, izmantojot noapaļošanu līdz pusei līdz pāra skaitlim, bet, tieši noapaļojot līdz veselam skaitlim, iegūst 9.

Dažās datoru valodās un IEEE 754-2008 standartā ir noteikts, ka vienkāršos aprēķinos rezultātu nedrīkst noapaļot divas reizes. Tā kā Java ir īpaši problemātiska, jo tā ir paredzēta identiskai darbināšanai uz dažādām mašīnām, lai to panāktu ar x87 peldošo komatu, bija jāizmanto īpaši programmēšanas triki. Java valoda tika mainīta, lai pieļautu atšķirīgus rezultātus gadījumos, kad atšķirībai nav nozīmes, un pieprasītu izmantot "strictfp" kvalificētāju, ja rezultātiem ir precīzi jāatbilst.

Precīzs aprēķins ar noapaļotu aritmētisko aprēķinu

Lai novērtētu funkcijas ar diskrētu domēnu un diapazonu precīzu vērtību, ir iespējams izmantot noapaļoto aritmētiku. Piemēram, ja mēs zinām, ka vesels skaitlis n ir ideāls kvadrāts, mēs varam aprēķināt tā kvadrātsakni, pārvēršot n peldošā komata vērtībā x, aprēķinot aptuveno x kvadrātsakni y ar peldošo komatu un pēc tam noapaļojot y līdz tuvākajam veselam skaitlim q. Ja n nav pārāk liels, y noapaļošanas kļūda ar peldošo komatu būs mazāka par 0,5, tāpēc noapaļotā vērtība q būs precīza n kvadrātsakne.

Galda veidotāja dilemma

Viljams Kahans (William Kahan) radīja terminu "tabulas veidotāja dilemma", lai apzīmētu nezināmās izmaksas, kas rodas, noapaļojot transcendentālās funkcijas:

"Neviens nezina, cik izmaksātu pareizi noapaļot y^w uz katriem diviem peldošā komata argumentiem, pie kuriem tas nepārplūst/nepārplūst. Tā vietā cienījamas matemātikas bibliotēkas aprēķina elementāras transcendentālās funkcijas lielākoties nedaudz vairāk par pusi ulp un gandrīz vienmēr labi viena ulp robežās. Kāpēc Y^W nevar noapaļot līdzīgi kā SQRT? Tāpēc, ka neviens nezina, cik daudz aprēķinu tas izmaksātu... Nav vispārīga veida, kā paredzēt, cik daudz papildu ciparu būs jānes, lai aprēķinātu transcendentālo izteiksmi un pareizi noapaļotu to līdz kādam iepriekš noteiktam ciparu skaitam. Pat fakts (ja tas ir taisnība), ka galu galā pietiks ar galīgu papildu ciparu skaitu, var būt dziļa teorēma."

IEEE peldošā komata standarts garantē, ka saskaitīšana, atņemšana, reizināšana, dalīšana, kvadrātsakne un atlikums ar peldošo komatu dos pareizi noapaļotu bezgalīgi precīzas operācijas rezultātu. Tomēr sarežģītākām funkcijām šādas garantijas nav dotas, un parasti tās labākajā gadījumā ir precīzas tikai ar precizitāti līdz pēdējam bitu skaitlim.

Izmantojot Gelfonda-Šneidera teorēmu un Lindemana-Veierštrasa teorēmu, var pierādīt, ka daudzas standarta elementārās funkcijas dod transcendentālus rezultātus, ja tām ir doti racionāli nenulles lieluma argumenti; tāpēc vienmēr ir iespējams pareizi noapaļot šādas funkcijas. Tomēr, lai noteiktu robežu, cik precīzi rezultāti ir jāaprēķina, pirms var garantēt pareizi noapaļotu rezultātu, var būt nepieciešams daudz aprēķinu laika.

Tagad ir dažas paketes, kas nodrošina pilnīgu precizitāti. MPFR pakete sniedz pareizi noapaļotus patvaļīgas precizitātes rezultātus. IBM ir uzrakstījusi pakotni ātru un precīzu IEEE elementāro funkciju izveidei, un nākotnē standarta bibliotēkas varētu piedāvāt šādu precizitāti.

Ir iespējams izveidot labi definētus aprēķināmus skaitļus, kurus, iespējams, nekad nebūs iespējams pareizi noapaļot neatkarīgi no tā, cik daudz ciparu tiks aprēķināti. Piemēram, ja Goldbaha pieņēmums ir patiess, bet nepierādāms, tad nav iespējams pareizi noapaļot 0,5 + 10-n, kur n ir pirmais pāra skaitlis, kas lielāks par 4 un nav divu pirmskaitļu summa, vai 0,5, ja šāda skaitļa nav. Tomēr to var aproksimēt ar jebkuru precizitāti pat tad, ja pieņēmums nav pierādāms.

Vēsture

Noapaļošanas jēdziens ir ļoti vecs, iespējams, pat senāks par dalīšanas jēdzienu. Dažās senās māla plāksnītēs, kas atrastas Mezopotāmijā, ir tabulas ar noapaļotām atgriezenisko un kvadrātsakņu vērtībām ar pamatu 60. Arī π, gada garuma un mēneša garuma noapaļojumi ir seni.

Kopš 1940. gada par ASTM (E-29) standartu tiek izmantota apaļās un vienādās koordinātas metode. Terminu "objektīvā noapaļošana" un "statistiskā noapaļošana" izcelsme ir diezgan pašsaprotama. Robert Simpson Woodward 1906. gada 4. izdevumā "Probability and Theory of Errors" ("Varbūtības un kļūdu teorija") to nosauca par "datora noteikumu", norādot, ka to tolaik plaši izmantoja cilvēki datori, kas rēķināja matemātiskās tabulas. Čērčila Eizenhārta 1947. gada rakstā "Datu noapaļošanas vai grupēšanas ietekme" (Selected Techniques of Statistical Analysis, McGrawHill, 1947, Eisenhart, Hastay, and Wallis, editors) norādīts, ka šī prakse datu analīzē jau bija "nostiprinājusies".

Termina "baņķieru noapaļošana" izcelsme ir vēl neskaidrāka. Ja šī noapaļošanas metode kādreiz ir bijusi standarts banku nozarē, pierādījumus ir ļoti grūti atrast. Gluži pretēji, Eiropas Komisijas ziņojuma "Euro ieviešana un valūtas summu noapaļošana" 2. iedaļa liecina, ka iepriekš banku darbībā nav bijusi standarta pieeja noapaļošanai; tajā norādīts, ka "pusceļu" summas jānoapaļo uz augšu.

Līdz 20. gadsimta 80. gadiem datoru ar mainīgo komata punktu aritmētikā izmantotā noapaļošanas metode parasti bija noteikta ar aparatūru, bija slikti dokumentēta, nekonsekventa un katram datora zīmolam un modelim atšķirīga. Situācija mainījās pēc tam, kad lielākā daļa datoru ražotāju pieņēma IEEE 754 mainīgā komata standartu. Standarts ļauj lietotājam izvēlēties vienu no vairākiem noapaļošanas režīmiem un katrā no tiem precīzi norāda, kā noapaļot rezultātus. Šīs īpašības padarīja skaitliskos aprēķinus paredzamākus un neatkarīgākus no mašīnām, kā arī ļāva efektīvi un konsekventi īstenot intervālu aritmētiku.

Noapaļošanas funkcijas programmēšanas valodās

Lielākajā daļā programmēšanas valodu ir pieejamas funkcijas vai īpaša sintakse, lai dažādos veidos noapaļotu daļskaitļus. Pirmajās skaitļu valodās, piemēram, FORTRAN un C, bija paredzēta tikai viena metode, parasti saīsināšana (uz nulli). Šo noklusējuma metodi varēja izmantot noteiktos kontekstos, piemēram, piešķirot daļskaitli vesela skaitļa mainīgajam vai izmantojot daļskaitli kā indeksu masīvā. Citi noapaļošanas veidi bija jāprogrammē skaidri; piemēram, pozitīva skaitļa noapaļošanu līdz tuvākajam veselam skaitlim varēja īstenot, pieskaitot 0,5 un saīsinot.

Tomēr pēdējās desmitgadēs vairuma valodu sintakse un/vai standarta bibliotēkas parasti nodrošina vismaz četras pamata noapaļošanas funkcijas (uz augšu/augšup, uz leju/uz grīdas, uz tuvāko un uz nulli). Neizšķiršanas metode var atšķirties atkarībā no valodas un versijas un/vai to var izvēlēties programmētājs. Vairākas valodas seko IEEE-754 peldošā komata standartam un definē šīs funkcijas kā divkāršas precizitātes float argumenta pieņemšanu un tāda paša tipa rezultāta atdošanu, ko pēc tam vajadzības gadījumā var konvertēt uz veselu skaitli. Tā kā IEEE dubultās precizitātes formātā ir 52 frakcionārie biti, šī pieeja var novērst nepareizu pārpildīšanos valodās, kurās ir 32 bitu veseli skaitļi. Dažās valodās, piemēram, PHP, ir pieejamas funkcijas, kas noapaļo vērtību līdz noteiktam decimālciparu skaitlim, piemēram, no 4321,5678 līdz 4321,57 vai 4300. Turklāt daudzās valodās ir pieejama "printf" vai līdzīga virknes formatēšanas funkcija, kas ļauj pārvērst daļskaitli virknē, noapaļojot to līdz lietotāja norādītajam decimālzīmju skaitam (precizitātei). No otras puses, saīsināšana (noapaļošana līdz nullei) joprojām ir nokārtošanas metode, ko izmanto daudzas valodas, īpaši divu veselu skaitļu dalīšanai.

Turpretī CSS un SVG nenosaka nekādu konkrētu maksimālo precizitāti skaitļiem un mērījumiem, kas to dokumentu objektu modelī un interfeisa apraksta valodas saskarnē tiek apstrādāti un attēloti kā virknes, it kā tiem būtu bezgalīga precizitāte, un nenošķir veselos skaitļus un vērtības ar peldošo komatu; tomēr šo valodu implementācijas parasti pārvērš šos skaitļus IEEE-754 divkāršā peldošā komata sistēmā, pirms aprēķinātie cipari tiek attēloti ar ierobežotu precizitāti (jo īpaši standarta Javascript vai ECMAScript saskarnes sasaistēs).

Citi noapaļošanas standarti

Dažās disciplīnās vai iestādēs ir izdoti noapaļošanas standarti vai direktīvas.

Laikapstākļu novērojumi ASV

1966. gada vidū izdotajās vadlīnijās ASV Meteoroloģijas federālā koordinatora birojs noteica, ka laikapstākļu dati ir jānoapaļo līdz tuvākajam apaļajam skaitlim, piemērojot "noapaļošanas uz pusi uz augšu" noteikumu. Piemēram, 1,5, noapaļojot līdz veselam skaitlim, kļūst par 2, un -1,5 kļūst par -1. Līdz šim datumam neizšķiršanas noteikums bija "noapaļot uz pusi no nulles".

Negatīvā nulle meteoroloģijā

Daži meteorologi var rakstīt "-0", lai norādītu temperatūru no 0,0 līdz -0,5 grādiem (izņēmums), kas noapaļota līdz veselam skaitlim. Šo apzīmējumu lieto, ja negatīvā zīme tiek uzskatīta par svarīgu, neatkarīgi no tā, cik mazs ir lielums; piemēram, noapaļojot temperatūru pēc Celsija skalas, kur zem nulles norāda uz sasalšanu. []

Saistītās lapas

Jautājumi un atbildes

J: Ko nozīmē vārds "noapaļošana"?


A: Noapaļošana ir skaitliskas vērtības aizstāšana ar citu vērtību, kas ir aptuveni vienāda, bet kuras forma ir īsāka, vienkāršāka vai skaidrāka.

J: Kāds ir noapaļošanas piemērs?


A: Noapaļošanas piemērs varētu būt 23,74 ASV dolāru noapaļošana līdz 24 ASV dolāriem, daļskaitļa 312/937 noapaļošana līdz 1/3 un izteiciena 2 {\displaystyle {\sqrt {2}}} noapaļošana līdz 1,41.

J: Kāpēc mēs noapaļojam skaitļus?


A: Mēs noapaļojam skaitļus, lai iegūtu vērtību, ko ir vieglāk rakstīt un apstrādāt nekā sākotnējo. To var darīt arī, lai norādītu aprēķinātā skaitļa precizitāti.

J: Kādas ir dažas iespējamās problēmas saistībā ar noapaļošanu?


A: Noapaļošanas rezultātā var rasties noapaļošanas kļūda, un dažos gadījumos tā var padarīt rezultātu bezjēdzīgu, jo aprēķinos laika gaitā uzkrājas kļūdas. Turklāt precīza transcendentālo matemātisko funkciju noapaļošana var būt sarežģīta, jo nav iespējams zināt, cik papildu ciparu ir jāaprēķina, lai iepriekš izlemtu, vai noapaļot uz augšu vai uz leju.

J: Kā noapaļošana ir saistīta ar kvantēšanu?


A: Noapaļošanai ir daudz līdzību ar kvantizāciju, kas notiek, kad fizikāli lielumi ir jākodē ar skaitļiem vai ciparu signāliem.

AlegsaOnline.com - 2020 / 2023 - License CC3