Afrunding | en numerisk værdi betyder at erstatte den med en anden værdi, der er omtrent lig med

Ordet "afrunding" for en numerisk værdi betyder at erstatte den med en anden værdi, der er omtrent lige stor, men som har en kortere, enklere eller mere eksplicit form. F.eks. kan 23,74 USD afrundes til 24 USD, brøken 312/937 kan afrundes til 1/3, og udtrykket {\displaystyle {\sqrt {2}}} kan afrundes til 1,41.

Afrunding sker ofte med vilje for at opnå en værdi, der er nemmere at skrive og håndtere end den oprindelige værdi. Det kan også ske for at angive nøjagtigheden af et beregnet tal; f.eks. kan en mængde, der er beregnet til 123,456, men som man ved kun er nøjagtig med en nøjagtighed på få hundrede enheder, bedre angives som "ca. 123,500".

På den anden side kan afrunding medføre en vis afrundingsfejl som følge heraf. Afrunding er næsten uundgåelig i mange beregninger, især når man dividerer to tal i heltal eller laver fastpunktsaritmetik, når man beregner matematiske funktioner som f.eks. kvadratrødder, logaritmer og sinus, eller når man bruger en flydende punktrepræsentation med et fast antal signifikante cifre. I en række beregninger akkumuleres disse afrundingsfejl generelt, og i visse "dårlige" tilfælde kan de gøre resultatet meningsløst.

Det er vanskeligt at afrunde transcendentale matematiske funktioner nøjagtigt, fordi man ikke på forhånd kan vide, hvor mange ekstra cifre der skal beregnes for at afgøre, om der skal rundes op eller ned. Dette problem er kendt som "bordbilledmagerens dilemma" (nedenfor).

Afrunding har mange ligheder med den kvantisering, der finder sted, når fysiske størrelser skal kodes med tal eller digitale signaler.




 

Typer af afrunding

Typiske afrundingsproblemer kan omfatte:

  • Tilnærmelse af et irrationelt tal ved hjælp af en brøk. F.eks. π med 22/7.
  • Tilnærmelse af en brøk med periodisk decimaludvidelse med en endelig decimalbrøk. F.eks. 5/3 med 1,6667.
  • Erstatning af et rationelt tal med en brøk med mindre tæller og nævner. F.eks. 3122/9417 med 1/3.
  • Udskiftning af et decimaltal med brøkdel med et tal med færre cifre. F.eks. 2,1784 dollars med 2,18 dollars.
  • Udskiftning af et decimalt heltal med et heltal med flere efterfølgende nuller. For eksempel. 23.217 personer med 23.200 personer.
  • Erstatning af en værdi med et multiplum af et bestemt beløb. For eksempel. 27,2 sekunder med 30 sekunder (et multiplum af 15).

 

Afrunding til et angivet trin

Den mest almindelige type afrunding er at afrunde til et heltal eller, mere generelt, til et helt multiplum af et eller andet trin - f.eks. afrunding til hele tiendedele af sekunder, hundrededele af en dollar, til hele multipla af 1/2 eller 1/8 tomme, til hele dusin eller tusinde osv.

Generelt indebærer afrunding af et tal x til et multiplum af et bestemt trin m følgende trin:

  1. Divider x med m, og lad resultatet være y;
  2. Runder y til en heltalsværdi, kald den q;
  3. Multiplicer q med m for at få den afrundede værdi z.

{\displaystyle z=\mathrm {round} (x,m)=\mathrm {round} (x/m)\cdot m\,}

Hvis man f.eks. runder x = 2,1784 dollars til hele cents (dvs. til et multiplum af 0,01), skal man beregne y = x/m = 2,1784/0,01 = 217,84, derefter runder man y til heltallet q = 218 og til sidst beregner z = q×m = 218×0,01 = 2,18.

Når der afrundes til et forudbestemt antal signifikante cifre, afhænger stigningen m af størrelsen af det tal, der skal afrundes (eller af det afrundede resultat).

Stigningen m er normalt en endelig brøk i det talsystem, der anvendes til at repræsentere tallene. Til visning for mennesker betyder det normalt decimaltalsystemet (dvs. m er et helt tal gange en potens af 10, som f.eks. 1/1000 eller 25/100). Til mellemliggende værdier, der lagres i digitale computere, betyder det ofte det binære talsystem (m er et heltal gange en potens af 2).

Den abstrakte enkeltargumentfunktion "round()", der returnerer et heltal fra en vilkårlig reel værdi, har mindst et dusin forskellige konkrete definitioner, som præsenteres i afsnittet om afrunding til heltal. Den abstrakte "round()"-funktion med to argumenter er formelt defineret her, men i mange tilfælde anvendes den med den implicitte værdi m = 1 for stigningen og reduceres derefter til den tilsvarende abstrakte funktion med et enkelt argument, som også har de samme dusin forskellige konkrete definitioner.


 

Afrunding til heltal

Den mest grundlæggende form for afrunding er at erstatte et vilkårligt tal med et heltal. Alle de følgende afrundingsformer er konkrete implementeringer af den abstrakte enkeltargument-funktion "round()", der er præsenteret og anvendt i de foregående afsnit.

Der er mange måder at afrunde et tal y til et helt tal q på. De mest almindelige er

  • Rund nedad (eller tag gulvet, eller rund mod minus uendelig): q er det største hele tal, der ikke overstiger y.

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

  • Rund opad (eller tag loftet, eller rund mod plus uendelig): q er det mindste hele tal, der ikke er mindre end y.

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

  • Runding mod nul (eller afkortning eller afrunding fra uendelig): q er den hele del af y uden brøkcifre.

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

  • Runding væk fra nul (eller runding mod uendelig): hvis y er et heltal, er q y; ellers er q det heltal, der er tættest på 0, og som er sådan, at y ligger mellem 0 og q.

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

  • Afrunding til nærmeste: q er det hele tal, der er tættest på y. Dette skrives undertiden som {\displaystyle q=\lfloor y\rceil } (se nedenfor for regler for at afgøre uafgjort).

De første fire metoder kaldes rettet afrunding, da forskydningerne fra det oprindelige tal y til den afrundede værdi q alle er rettet mod eller væk fra den samme grænseværdi (0, +∞ eller -∞).

Hvis y er positiv, er afrunding nedad det samme som afrunding mod nul, og afrunding opad er det samme som afrunding væk fra nul. Hvis y er negativ, er round-down det samme som round-away-from-zero, og round-up det samme som round-towards-zero. Hvis y er et helt tal, er q under alle omstændigheder bare y. Følgende tabel illustrerer disse afrundingsmetoder:

y

afrunde
nedad
(mod -∞)

runde
op
(mod +∞)

afrundes
mod
nul

afrundes
fra
nul

afrundes
til
nærmeste

+23.67

+23

+24

+23

+24

+24

+23.50

+23

+24

+23

+24

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

-23.67

-24

-23

-23

-24

-24

Når mange beregninger udføres i rækkefølge, kan valget af afrundingsmetoden have en meget stor indflydelse på resultatet. Et berømt eksempel er et nyt indeks, der blev oprettet af Vancouver Stock Exchange i 1982. Det blev oprindeligt sat til 1000.000, og efter 22 måneder var det faldet til ca. 520 - mens aktiekurserne generelt var steget i den periode. Problemet skyldtes, at indekset blev genberegnet tusindvis af gange dagligt, og at det altid blev afrundet ned til 3 decimaler, således at afrundingsfejlene akkumulerede sig. En genberegning med bedre afrunding gav en indeksværdi på 1098,892 ved udgangen af samme periode.


 

Afbryder af uafgjort

Afrunding af et tal y til det nærmeste hele tal kræver en regel til at afrunde de tilfælde, hvor y er præcis halvvejs mellem to hele tal - dvs. når brøkdelen af y er præcis 0,5.

Rundt halvt op

Følgende regel til at afgøre uafgjort, kaldet "round half up" (eller "round half towards plus infinity"), er meget anvendt i mange discipliner. Det vil sige, at halve værdier y altid afrundes opad.

  • Hvis brøken af y er præcis 0,5, er q = y + 0,5.

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

For eksempel bliver værdien 23,5 med denne regel afrundet til 24, men -23,5 bliver afrundet til -23.

Dette er en af de to regler, der almindeligvis undervises i i amerikanske matematiktimer i grundskolen.

Hvis det ikke var for 0,5 brøker, ville de afrundingsfejl, der opstår ved afrunding til nærmeste metode, være ret symmetriske: for hver brøk, der afrundes opad (f.eks. 0,268), er der en tilsvarende brøk (nemlig 0,732), der afrundes nedad med samme beløb. Når man afrunder et stort sæt tal med tilfældige brøkdele, vil disse afrundingsfejl statistisk set kompensere hinanden, og den forventede (gennemsnitlige) værdi af de afrundede tal vil være lig med den forventede værdi af de oprindelige tal.

Reglen om at runde halvdelen opad til uafgjort er dog ikke symmetrisk, da brøker, der er præcis 0,5, altid bliver rundet opad. Denne asymmetri medfører en positiv skævhed i afrundingsfejlene. Hvis brøken y f.eks. består af tre tilfældige decimaler, vil den forventede værdi af q være 0,0005 højere end den forventede værdi af y. Af denne grund er afrunding med reglen om at runde halvt opad også (tvetydigt) kendt som asymmetrisk afrunding.

En af grundene til at afrunde opad til 0,5 er, at der kun skal undersøges ét ciffer. Når man f.eks. ser 17,50000..., bestemmer de første tre cifre, 17,5, at tallet skal afrundes opad til 18. Hvis den modsatte regel blev anvendt (afrunding halvt nedad), skulle alle nul decimaler undersøges for at afgøre, om værdien er præcis 17,5.

Rundt halvt nedad

Man kan også bruge runde halvt nedad (eller runde halvt mod minus uendeligt) i modsætning til den mere almindelige runde halvt opad (metoden med at runde halvt opad er en almindelig konvention, men er ikke andet end en konvention).

  • Hvis brøken af y er præcis 0,5, er q = y - 0,5.

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

F.eks. bliver 23,5 afrundet til 23, og -23,5 bliver afrundet til -24.

Reglen om at runde halvdelen nedad til uafgjort er ikke symmetrisk, da brøker, der er præcis 0,5, altid bliver afrundet nedad. Denne asymmetri medfører en negativ skævhed i afrundingsfejlene. Hvis brøken af y f.eks. består af tre tilfældige decimaler, vil den forventede værdi af q være 0,0005 lavere end den forventede værdi af y. Af denne grund er afrunding med reglen om afrunding halvt nedad også (tvetydigt) kendt som asymmetrisk afrunding.

Rundt halvt væk fra nul

Den anden metode til at afgøre uafgjort, der ofte undervises og anvendes, er den runde halvdel væk fra nul (eller runde halvdel mod uendeligt), nemlig:

  • Hvis brøken af y er præcis 0,5, så er q = y + 0,5, hvis y er positiv, og q = y - 0,5, hvis y er negativ.

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

F.eks. bliver 23,5 afrundet til 24, og -23,5 bliver afrundet til -24.

Denne metode behandler positive og negative værdier symmetrisk og er derfor fri for generel skævhed, hvis de oprindelige tal er positive eller negative med samme sandsynlighed. Denne regel vil dog stadig medføre en positiv skævhed for positive tal og en negativ skævhed for negative tal.

Det bruges ofte til valutaomregninger og prisafrundinger (når beløbet først omregnes til den mindste signifikante underafdeling af valutaen, f.eks. cent af en euro), da det er let at forklare ved blot at tage hensyn til det første brøkciffer, uafhængigt af supplerende præcisionscifre eller beløbets fortegn (for at sikre en streng ækvivalens mellem betalende og modtager af beløbet).

Rundt halvt mod nul

Man kan også runde halvdelen mod nul (eller runde halvdelen væk fra uendelig) i modsætning til den mere almindelige runde halvdelen væk fra nul (metoden med at runde halvdelen væk fra nul er en almindelig konvention, men er ikke andet end en konvention).

  • Hvis brøken af y er præcis 0,5, er q = y - 0,5, hvis y er positiv, og q = y + 0,5, hvis y er negativ.

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

F.eks. bliver 23,5 afrundet til 23, og -23,5 bliver afrundet til -23.

Denne metode behandler også positive og negative værdier symmetrisk og er derfor fri for generel skævhed, hvis de oprindelige tal er positive eller negative med samme sandsynlighed. Denne regel vil dog stadig medføre en negativ skævhed for positive tal og en positiv skævhed for negative tal.

Rund halvdelen til lige

En regel, der er endnu mindre skæv, er at runde halvdelen til lige, nemlig

  • Hvis brøken af y er 0,5, er q det lige hele tal, der er nærmest y.

Således bliver f.eks. +23,5 til +24, +22,5 til +22, -22,5 til -22 og -23,5 til -24.

Denne metode behandler også positive og negative værdier symmetrisk og er derfor fri for generel skævhed, hvis de oprindelige tal er positive eller negative med samme sandsynlighed. Desuden er den forventede (gennemsnitlige) værdi af de afrundede tal for de fleste fornuftige fordelinger af y-værdierne stort set den samme som værdien af de oprindelige tal, selv om sidstnævnte alle er positive (eller negative). Denne regel vil dog stadig medføre en positiv skævhed for lige tal (herunder nul) og en negativ skævhed for de ulige tal.

Denne variant af afrundingsmetoden kaldes også for "unbiased rounding" (tvetydigt og en smule misbrug), konvergent afrunding, statistikerafrunding, hollandsk afrunding, gaussisk afrunding eller bankers' rounding. Dette er meget udbredt i bogholderiet.

Dette er den standardafrundingstilstand, der anvendes i IEEE 754-beregningsfunktioner og -operatorer.

Rundt halvt til ulige

En anden regel, der minder meget om den runde halvdel til lige, nemlig

  • Hvis brøken af y er 0,5, er q det ulige hele tal, der er nærmest y.

Således bliver f.eks. +22,5 til +23, +21,5 til +21, -21,5 til -21 og -22,5 til -23.

Denne metode behandler også positive og negative værdier symmetrisk og er derfor fri for generel skævhed, hvis de oprindelige tal er positive eller negative med samme sandsynlighed. Desuden er den forventede (gennemsnitlige) værdi af de afrundede tal for de fleste fornuftige fordelinger af y-værdierne stort set den samme som værdien af de oprindelige tal, selv om sidstnævnte alle er positive (eller negative). Denne regel vil dog stadig medføre en negativ skævhed for lige tal (herunder nul) og en positiv skævhed for de ulige tal.

Denne variant bruges næsten aldrig i de fleste beregninger, undtagen i situationer, hvor man ønsker at undgå at runde 0,5 eller -0,5 til nul, eller at undgå at øge skalaen for tal repræsenteret som flydende komma (med begrænsede områder for skaleringseksponenten), så et ikke uendeligt tal afrundes til uendeligt, eller at en lille denormal værdi afrundes til en normal værdi, der ikke er nul (disse situationer kan forekomme med den runde halvdel til lige tilstand). Denne tilstand foretrækker faktisk at bevare den eksisterende skala for slipsetal, idet man så vidt muligt undgår resultater uden for området.

Stokastisk afrunding

En anden metode til at afbryde uafgjorthed er stokastisk afrunding:

  • Hvis brøkdelen af y er 0,5, skal du vælge q tilfældigt blandt y + 0,5 og y - 0,5 med samme sandsynlighed.

Ligesom "rund halvt til lige" er denne regel i det væsentlige fri for generel skævhed, men den er også retfærdig for lige og ulige q-værdier. På den anden side indfører den en tilfældig komponent i resultatet; hvis man udfører den samme beregning to gange på de samme data, kan det give to forskellige resultater. Den er også åben for ubevidst skævhed, hvis mennesker (snarere end computere eller tilfældighedsinstrumenter) "tilfældigt" beslutter, i hvilken retning der skal afrundes.

Skiftende tiebreaking

En metode, der er mere uklar end de fleste, er at runde halvdelen skiftevis.

  • Hvis brøkdelen er 0,5, skal du skiftevis afrunde opad og nedad: ved første forekomst af en brøkdel på 0,5 skal du afrunde opad, ved anden forekomst skal du afrunde nedad og så videre og så videre.

Dette undertrykker den tilfældige komponent i resultatet, hvis forekomsterne af 0,5 brøkdele kan nummereres effektivt. Men det kan stadig medføre en positiv eller negativ skævhed alt efter den afrundingsretning, der er tildelt den første forekomst, hvis det samlede antal forekomster er ulige.


 

Simpel dithering

I nogle sammenhænge kan alle de ovennævnte afrundingsmetoder være utilfredsstillende. Lad os f.eks. antage, at y er en nøjagtig måling af et lydsignal, som afrundes til et helt tal q for at reducere lager- eller transmissionsudgifterne. Hvis y ændrer sig langsomt med tiden, vil enhver af ovenstående afrundingsmetoder resultere i, at q er fuldstændig konstant i lange intervaller, adskilt af pludselige spring på ±1. Når q-signalet afspilles, vil disse trin kunne høres som en meget ubehagelig støj, og alle variationer i det oprindelige signal mellem to heltalsværdier vil gå helt tabt.

En måde at undgå dette problem på er at afrunde hver værdi y opad med en sandsynlighed svarende til dens brøkdel og nedad med komplementet til denne sandsynlighed. F.eks. vil tallet 23,17 blive afrundet opad til 24 med sandsynligheden 0,17, og nedad til 23 med sandsynligheden 1 - 0,17 = 0,83. (Dette svarer til at afrunde y + s nedad, hvor s er et tilfældigt tal, der er jævnt fordelt mellem 0 og 1). Med denne særlige afrunding, kendt som dithering, bliver de pludselige trin erstattet af en mindre ubehagelig støj, og selv små variationer i det oprindelige signal vil blive bevaret i et vist omfang. Ligesom den stokastiske tilgang til tie-breaking har dithering ingen bias: hvis alle brøkværdier er lige sandsynlige, er det lige så sandsynligt at afrunde opad med et bestemt beløb som at afrunde nedad med det samme beløb; og det samme gælder for summen af flere afrundede tal. På den anden side indfører dithering en tilfældig komponent i resultatet, som er meget større end ved stokastisk tie-breaking.

Mere præcist vil afrundingsfejlen for hvert tallet være en ensartet fordelt tilfældig variabel med middelværdien nul, men med en standardafvigelse {\displaystyle 1/{\sqrt {12}}\approx 0.2886}, hvilket er bedre end 1/2 standardafvigelse med de enkle prædiktive metoder, men lidt højere end med den enklere stokastiske metode. Summen af n afrundede tal vil imidlertid være en tilfældig variabel med en forventet fejl på nul, men med standardafvigelse {\displaystyle {\sqrt {n}}/{\sqrt {12}}} (den samlede resterende støj), som divergerer halvkvadratisk og kan blive let opfattelig, selv om standardafvigelsen af afrundingsfejlen pr. prøve vil være {\displaystyle 1/{\sqrt {12n}}} , som langsomt konvergerer semi-kvadratisk mod nul. Så denne tilfældige fordeling kan stadig være for høj for nogle applikationer, der afrunder mange data.


 

Multidimensionel dithering

Denne variant af den simple dithering-metode runder stadig værdierne med en sandsynlighed svarende til brøkdelen af dem. Men i stedet for at anvende en tilfældig fordeling til afrunding af isolerede prøver, summeres den afrundingsfejl, der opstår ved hver afrundet prøve, for de næste omkringliggende elementer, der skal prøves eller beregnes; denne akkumulerede værdi lægges derefter til værdien af disse næste prøvetagede eller beregnede værdier, der skal afrundes, således at de modificerede værdier tager hensyn til denne forskel ved hjælp af en forudsigelsesmodel (som f.eks. Floyd-Steinberg dithering).

De modificerede værdier afrundes derefter med en af de ovennævnte afrundingsmetoder, hvoraf de bedste er stokastiske metoder eller dithering-metoder: i sidstnævnte tilfælde vil summen af n afrundede tal stadig være en tilfældig variabel med en forventet fejl på nul, men med en fremragende konstant standardafvigelse på {\displaystyle 1/{\sqrt {12}}}i stedet for at divergere halvkvadratisk ved dithering af isolerede prøver; og den samlede gennemsnitlige afrundingsfejlafvigelse pr. afrundet prøve vil være {\displaystyle 1/(n{\sqrt {12}})} , som vil konvergere hyperbolisk mod nul, hurtigere end med den halvhyperboliske konvergens ved dithering af isolerede prøver.

I praksis anvendes akkumulering af afrundingsfejl i forbindelse med afrunding af store sæt samplede data (f.eks. lyd-, billed- og videorensning) oftest med en simpel prædiktiv afrunding af de modificerede værdier (f.eks. afrunding mod nul), fordi det stadig vil bevare den hyperboliske konvergens mod nul af den samlede gennemsnitlige afrundingsfejlbias og dens standardafvigelse. Denne forbedring anvendes ofte inden for billed- og lydbehandling (især til nøjagtig omskalering og antialiasing-operationer, hvor den simple probabilistiske dithering af isolerede værdier stadig kan give mærkbar støj, undertiden endda værre end de moiré-effekter, der opstår med simple ikke-probabilistiske afrundingsmetoder, der anvendes på isolerede prøver).

Den effektive udbredelse af akkumulerede afrundingsfejl kan afhænge af den diskrete dimension af de samplede data, der skal afrundes: ved sampling af todimensionale billeder, herunder farvede billeder (der tilføjer den diskrete dimension af farveplaner), eller tredimensionale videoer (der tilføjer en diskret tidsdimension) eller polyfone lyddata (ved brug af diskrete dimensioner af tid og kanal), kan det stadig være at foretrække at udbrede denne fejl i en foretrukken retning, eller ligeledes i flere ortogonale dimensioner, f.eks. vertikalt vs. horisontalt for todimensionale billeder, eller i parallelle farvekanaler ved samme position og/eller tidsstempel og afhængigt af andre egenskaber ved disse ortogonale diskrete dimensioner (i henhold til en opfattelsesmodel). I disse tilfælde kan der anvendes flere afrundingsfejlakkumulatorer (mindst én for hver diskret dimension) eller en (n-1)-dimensionel vektor (eller matrix) af akkumulatorer.

I nogle af disse tilfælde kan de diskrete dimensioner af de data, der skal udtages og afrundes, behandles ikke-ortogonalt: Når der f.eks. arbejdes med farvede billeder, kan dataene fra de trikromatiske farveplaner i hver fysisk dimension (højde, bredde og eventuelt tid) omlægges ved hjælp af en perceptiv farvemodel, således at afrundingsfejlakkumulatorerne vil blive designet til at bevare lysstyrke med større sandsynlighed end farvetone eller mætning i stedet for at overføre fejl til hvert ortogonalt farveplan uafhængigt af hinanden; og i stereofoniske lyddata kan de to afrundede datakanaler (venstre og højre) afrundes sammen for at bevare deres middelværdi frem for deres effektive forskel, som vil absorbere de fleste af de resterende afrundingsfejl på en afbalanceret måde omkring nul.


 

Afrunding til simple brøker

I nogle sammenhænge er det ønskeligt at afrunde et givet tal x til en "pæn" brøk - dvs. den nærmeste brøk z = m/n, hvis tæller m og nævner n ikke overstiger et givet maksimum. Dette problem er ret forskelligt fra problemet med at afrunde en værdi til et fast antal decimale eller binære cifre eller til et multiplum af en given enhed m. Dette problem er beslægtet med Farey-sekvenser, Stern-Brocot-træet og fortsatte brøker.


 

Skalaafrunding

Denne type afrunding, som også kaldes afrunding til en logaritmisk skala, er en variant af afrunding til et bestemt trin, men med et trin, der ændres afhængigt af resultatets skala og størrelse. Helt konkret er hensigten at begrænse antallet af signifikante cifre, idet værdien afrundes, så ikke-signifikante cifre udelades. Denne type afrunding forekommer implicit med tal, der er beregnet med flydende punktværdier med begrænset præcision (f.eks. IEEE-754 float- og double-typer), men den kan bruges mere generelt til at afrunde alle reelle værdier med et hvilket som helst positivt antal signifikante cifre og en hvilken som helst strengt positiv reel base.

Det kan f.eks. bruges i teknisk grafik til at repræsentere data med en logaritmisk skala med variable trin (f.eks. bølgelængder, hvis base ikke nødvendigvis er et heltal), eller i statistiske data til at definere klasser af reelle værdier inden for intervaller med eksponentielt voksende bredder (men den mest almindelige anvendelse er med heltalsbaser som f.eks. 10 eller 2).

Denne type afrunding er baseret på en logaritmisk skala defineret af en fast reel skaleringsfaktor s (i de fleste tilfælde er denne faktor s=1) og en fast positiv base b>1 (ikke nødvendigvis et heltal og oftest forskellig fra skaleringsfaktoren) og et fast heltal n>0 af signifikante cifre i denne base (som bestemmer værdien af den stigning, der skal anvendes til afrunding, sammen med den beregnede effektive skala for det afrundede tal).

Det primære argumenttal (samt det resulterende afrundede tal) repræsenteres først i eksponentiel notation x = s-a-m-bc , således at tegnet s enten er +1 eller -1, den absolutte mantisse a er begrænset til det halvåbne positive interval [1/b,1], og eksponenten c er et vilkårligt (positivt eller negativt) heltal. I denne repræsentation er alle signifikante cifre i den brøkdel af den absolutte mantisse, hvis hele taldel altid er nul.

Hvis kildetallet (eller det afrundede tal) er 0, er den absolutte mantisse a defineret som 0, eksponenten c er fastsat til en vilkårlig værdi (0 i de fleste konventioner, men nogle floating-point repræsentationer kan ikke bruge en absolut mantisse på nul, men reserverer en specifik maksimal negativ værdi for eksponenten c for at repræsentere selve tallet 0), og tegnet s kan vælges vilkårligt mellem -1 og +1 (det sættes normalt til +1 for et simpelt nul, eller det sættes til samme tegn som argumentet i den afrundede værdi, hvis talrepræsentationen tillader at skelne mellem positive og negative nuller, selv om de i sidste ende repræsenterer den samme numeriske værdi 0).

En skaleret eksponentiel repræsentation som x = a-s-bc kan også anvendes tilsvarende med en mantisse a med fortegn enten lig med nul eller inden for et af de to halvåbne intervaller (-1,-1/b] og [+1/b,+1), og dette vil være tilfældet i nedenstående algoritme.

Trinene til beregning af denne skalerede afrunding svarer generelt til følgende:

  1. hvis x er lig med nul, returneres blot x; ellers returneres x:
  2. konvertere x til den skalerede eksponentielle repræsentation med en mantisse med fortegn:
    {\displaystyle x=a\cdot s\cdot b^{c}\,}
    1. lad x' være den uskalerede værdi af x ved at dividere den med skaleringsfaktoren s:
      {\displaystyle x'=x/s\,} ;
    2. Lad skaleringseksponenten c være 1 plus base-b-logaritmen af den absolutte værdi af x', afrundet nedad til et helt tal (mod minus uendelig):
      {\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|\right\rfloor \,} ;
    3. lad den underskrevne mantisse a være et produkt af x' divideret med b til potensen c:
      {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,}
  3. beregne den afrundede værdi i denne repræsentation:
    1. lad c' være den oprindelige skaleringseksponent c for x':
      {\displaystyle c'=c\,}
    2. lad m være stigningen for afrunding af mantisen a i overensstemmelse med det antal signifikante cifre, der skal bevares:
      {\displaystyle m=b^{-n}\,}
    3. lad a' være den signerede mantisse a afrundet i overensstemmelse med denne stigning m og den valgte afrundingstilstand:
      {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'})\cdot b^{-n}\,}
    4. hvis den absolutte værdi af a' ikke er lavere end b, så dekreteres n (multiplicer inkrementet m med b), skaleringseksponenten c' øges, den signerede mantisse a divideres med b, og den nye signerede mantisse a rundes igen til a' med samme formel; dette trin kan kun undgås, hvis abtract-funktionen "round()" altid runder a mod 0 (dvs.dvs. når det er en simpel trunkering), men er nødvendig, hvis den måske runder a mod uendelig, fordi den afrundede mantisse i dette tilfælde kan have en højere skaleringseksponent, hvilket giver et ekstra ciffer præcision.
  4. returnerer den afrundede værdi:
    {\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}\,} .

For den abstrakte "round()"-funktion kan denne type afrunding anvende en hvilken som helst af de afrundingsmetoder til heltal, der beskrives mere udførligt i næste afsnit, men det er oftest afrundingsmetoden til det nærmeste tal (med regler for afrunding ved uafgjorthed, der også beskrives mere udførligt nedenfor).

For eksempel:

  • den skalerede afrunding af 1,234 med skaleringsfaktor 1 i base 10 og 3 betydende cifre (maksimal relativ præcision = 1/1000), når der anvendes en hvilken som helst afrundingstilstand, vil give 1,23;
  • En tilsvarende afrunding af 1,236 giver 1,24;
  • En tilsvarende afrunding af 21,236 giver 21,2;
  • en tilsvarende afrunding af 321.236 vil give 321;
  • den skalerede afrunding af 1,234 med skaleringsfaktor 1 i base 10 og 3 betydende cifre (maksimal relativ præcision = 1/1000), når der anvendes nedrundingstilstand, vil give 1,23;
  • En tilsvarende afrunding af 1,236 vil også give 1,23;
  • den skalerede afrunding af {\displaystyle \scriptstyle 3\pi /7\;\approx \;6.8571\cdot \pi \cdot 2^{-4}} med skaleringsfaktor {\displaystyle \scriptstyle \pi } i base 2 og 3 betydende cifre (maksimal relativ præcision=1/8), vil ved anvendelse af nedrundingstilstand give {\displaystyle \scriptstyle 6\cdot \pi \cdot 2^{-4}\;=\;3\pi /8} ;
  • lignende skaleret afrunding af {\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}} vil returnere {\displaystyle \scriptstyle 5\cdot \pi \cdot 2^{-3}\;=\;5\pi /8} ;
  • lignende skaleret afrunding af {\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}} returnerer {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • En tilsvarende skaleret afrunding af {\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}} vil også give {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • lignende skaleret afrunding af {\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}} vil returnere {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}.

 

Afrunding til tilgængelig værdi

Færdigt tømmer, skrivepapir, kondensatorer og mange andre produkter sælges normalt kun i nogle få standardstørrelser.

Mange designprocedurer beskriver, hvordan man beregner en omtrentlig værdi og derefter "runder" til en standardstørrelse ved hjælp af sætninger som "afrundet nedad til nærmeste standardværdi", "afrundet opad til nærmeste standardværdi" eller "afrundet til nærmeste standardværdi".

Når et sæt af foretrukne værdier er ligeligt fordelt på en logaritmisk skala, kan valget af den foretrukne værdi, der ligger tættest på en given værdi, ses som en slags afrunding i skala. Sådanne "afrundede" værdier kan beregnes direkte.


 

Afrunding med flydende komma

I aritmetik med flydende komma har afrunding til formål at omdanne en given værdi x til en værdi z med et bestemt antal signifikante cifre. Med andre ord skal z være et multiplum af et tal m, der afhænger af størrelsen af z. Tallet m er en potens af basen (normalt 2 eller 10) for floating-point-formen.

Bortset fra denne detalje gælder alle de varianter af afrunding, der er omtalt ovenfor, også for afrunding af flydende komma-taller. Algoritmen for en sådan afrunding er præsenteret i afsnittet om afrunding med skala ovenfor, men med en konstant skaleringsfaktor s=1 og en heltalsbase b>1.

For resultater, hvor det afrundede resultat ville overløbe, er resultatet for en rettet afrunding enten den passende underskrevne uendelighed eller det højeste repræsentable positive finitte tal (eller det laveste repræsentable negative finitte tal, hvis x er negativt), afhængigt af afrundingsretningen. Resultatet af et overløb i det sædvanlige tilfælde af afrunding til lige er altid den passende uendelighed.

Desuden, hvis det afrundede resultat ville være underflow, dvs. hvis eksponenten ville overskride den laveste repræsenterbare hele talværdi, kan det effektive resultat enten være nul (eventuelt med fortegn, hvis repræsentationen kan opretholde en skelnen mellem tegn for nuller) eller det mindste repræsenterbare positive finitte tal (eller det højeste repræsenterbare negative finitte tal, hvis x er negativt), eventuelt et denormalt positivt eller negativt tal (hvis mantisen lagrer alle sine signifikante cifre, i hvilket tilfælde det mest signifikante ciffer stadig kan lagres i en lavere position ved at sætte de højeste lagrede cifre til nul, og denne lagrede mantisse lader ikke det mest signifikante ciffer falde bort, hvilket er muligt, når base b=2, fordi det mest signifikante ciffer altid er 1 i denne base), afhængigt af afrundingsretningen. Resultatet af et underflow i det sædvanlige tilfælde af afrunding til lige er altid det passende nul.


 

Dobbelt afrunding

Det er ikke garanteret, at afrunding af et tal to gange i træk til forskellige præcisioner, hvor den sidste præcision er grovere, giver det samme resultat som en afrunding én gang til den endelige præcision, undtagen i tilfælde af direkte afrunding. F.eks. giver afrunding af 9,46 til en decimal 9,5 og derefter 10 ved afrunding til heltal ved hjælp af afrunding halvt til lige, men ville give 9 ved direkte afrunding til heltal.

Nogle computersprog og IEEE 754-2008-standarden foreskriver, at resultatet i simple beregninger ikke skal afrundes to gange. Dette har været et særligt problem med Java, da det er designet til at blive kørt på samme måde på forskellige maskiner, og der har måttet anvendes særlige programmeringstricks for at opnå dette med x87-flydekomma. Java-sproget blev ændret, så det tillader forskellige resultater, når forskellen ikke har nogen betydning, og kræver, at der anvendes en "strictfp"-kvalifikator, når resultaterne skal være nøjagtigt overensstemmende.


 

Præcis beregning med afrundet aritmetik

Det er muligt at anvende afrundet aritmetik til at evaluere den nøjagtige værdi af en funktion med et diskret domæne og et diskret område. Hvis vi f.eks. ved, at et heltal n er et perfekt kvadrat, kan vi beregne dets kvadratrod ved at omdanne n til en Frivolpunktværdi x, beregne den omtrentlige kvadratrod y af x med flydende komma og derefter afrunde y til det nærmeste hele tal q. Hvis n ikke er for stort, vil Frivolpunktsafrundingsfejlen i y være mindre end 0,5, så den afrundede værdi q vil være den nøjagtige kvadratrod af n. På de fleste moderne computere kan denne metode være meget hurtigere end at beregne kvadratroden af n ved hjælp af en algoritme for hele tal.


 

Bordmagerens dilemma

William Kahan opfandt udtrykket "The Table-Maker's Dilemma" for de ukendte omkostninger ved at afrunde transcendentale funktioner:

"Ingen ved, hvor meget det ville koste at beregne y^w korrekt afrundet for hvert af de to flydepunktsargumenter, ved hvilke den ikke løber over/under. I stedet beregner velrenommerede matematiske biblioteker elementære transcendentale funktioner for det meste inden for lidt mere end en halv ulp og næsten altid godt inden for en ulp. Hvorfor kan Y^W ikke afrundes inden for en halv ulp ligesom SQRT? Fordi ingen ved, hvor meget beregning det ville koste... Der findes ingen generel metode til at forudsige, hvor mange ekstra cifre der skal medtages for at beregne et transcendentalt udtryk og afrunde det korrekt til et eller andet forudbestemt antal cifre. Selv det faktum (hvis det er sandt), at et endeligt antal ekstra cifre i sidste ende vil være tilstrækkeligt, kan være et dybt teorem."

IEEE-standarden for flydende komma garanterer, at addition, subtraktion, multiplikation, division, kvadratrod og flydende komma-rester giver det korrekt afrundede resultat af operationen med uendelig præcision. Der gives dog ikke en sådan garanti for mere komplekse funktioner, og de er typisk kun nøjagtige med en nøjagtighed på højst den sidste bit.

Ved hjælp af Gelfond-Schneider-sætningen og Lindemann-Weierstrass-sætningen kan det bevises, at mange af de elementære standardfunktioner giver transcendentale resultater, når de får rationelle argumenter, der ikke er nul; derfor er det altid muligt at afrunde sådanne funktioner korrekt. Det kan dog kræve meget beregningstid at fastsætte en grænse for en given præcision for, hvor nøjagtige resultater der skal beregnes, før et korrekt afrundet resultat kan garanteres.

Der findes nu nogle pakker, som giver fuld nøjagtighed. MPFR-pakken giver korrekt afrundede resultater med arbitrær præcision. IBM har skrevet en pakke til hurtige og nøjagtige IEEE-elementarfunktioner, og i fremtiden vil standardbibliotekerne måske tilbyde en sådan præcision.

Det er muligt at udtænke veldefinerede beregnelige tal, som det måske aldrig vil være muligt at afrunde korrekt, uanset hvor mange cifre der beregnes. Hvis Goldbachs formodning f.eks. er sand, men ikke kan bevises, er det umuligt at afrunde korrekt nedad 0,5 + 10-n , hvor n er det første lige tal større end 4, som ikke er summen af to primtal, eller 0,5, hvis der ikke findes et sådant tal. Dette kan dog tilnærmes til en given præcision, selv om formodningen er ubeviselig.


 

Historie

Begrebet afrunding er meget gammelt, måske endda ældre end begrebet division. Nogle gamle lertavler fundet i Mesopotamien indeholder tabeller med afrundede værdier af reciprokke værdier og kvadratrødder i base 60. Afrundede tilnærmelser til π, årets længde og månedens længde er også gamle.

Rundt-til-lige-metoden har fungeret som ASTM-standard (E-29) siden 1940. Oprindelsen af udtrykkene "unbiased rounding" og "statistikerens afrunding" er ret selvforklarende. I den fjerde udgave af "Probability and Theory of Errors" fra 1906 kaldte Robert Simpson Woodward dette for "computerens regel", hvilket indikerer, at det dengang var almindeligt anvendt af menneskelige computere, der beregnede matematiske tabeller. Churchill Eisenharts artikel fra 1947 "Effects of Rounding or Grouping Data" (i Selected Techniques of Statistical Analysis, McGrawHill, 1947, Eisenhart, Hastay og Wallis, redaktører) angav, at denne praksis allerede var "veletableret" inden for dataanalyse.

Oprindelsen af udtrykket "bankers' rounding" er mere uklar. Hvis denne afrundingsmetode nogensinde har været en standard i bankverdenen, har det vist sig at være yderst vanskeligt at finde beviser herfor. Tværtimod tyder afsnit 2 i Europa-Kommissionens rapport "The Introduction of the Euro and the Rounding of Currency Amounts" på, at der ikke tidligere har været nogen standardmetode for afrunding i banksektoren, og det anføres i rapporten, at "halve" beløb skal afrundes opad.

Indtil 1980'erne var den afrundingsmetode, der blev anvendt i computeraritmetik med flydende komma, normalt fastsat af hardwaren, dårligt dokumenteret, inkonsekvent og forskellig for hvert computermærke og hver computermodel. Denne situation ændrede sig, efter at IEEE 754-standarden for flydende komma blev vedtaget af de fleste computerproducenter. Standarden giver brugeren mulighed for at vælge mellem flere afrundingsmetoder og angiver i hvert enkelt tilfælde præcist, hvordan resultaterne skal afrundes. Disse funktioner gjorde numeriske beregninger mere forudsigelige og maskinuafhængige og muliggjorde en effektiv og konsekvent gennemførelse af intervalaritmetik.


 

Afrundingsfunktioner i programmeringssprog

De fleste programmeringssprog indeholder funktioner eller en særlig syntaks til at afrunde brøkdele på forskellige måder. De tidligste numeriske sprog, såsom FORTRAN og C, havde kun én metode, som regel trunkering (mod nul). Denne standardmetode kan være implicit i visse sammenhænge, f.eks. når et brøkregnet tal tildeles en heltalsvariabel, eller når et brøkregnet tal anvendes som indeks i et array. Andre former for afrunding skulle programmeres eksplicit; f.eks. kunne afrunding af et positivt tal til det nærmeste hele tal gennemføres ved at tilføje 0,5 og truncere.

I de sidste årtier har syntaksen og/eller standardbibliotekerne i de fleste sprog dog normalt indeholdt mindst de fire grundlæggende afrundingsfunktioner (op/loft, ned/etage, til nærmeste og mod nul). Afrundingsmetoden kan variere alt efter sprog og version og/eller kan vælges af programmøren. Flere sprog følger IEEE-754-standarden for flydende kommaer og definerer disse funktioner således, at de tager et argument med dobbelt præcision og returnerer resultatet af samme type, som så om nødvendigt kan konverteres til et heltal. Da IEEE-formatet for dobbelt præcision har 52 brøkbits, kan denne fremgangsmåde undgå uhensigtsmæssige overløb i sprog med 32-bit integrerede tal. Nogle sprog, f.eks. PHP, indeholder funktioner, der runder en værdi til et bestemt antal decimaler, f.eks. fra 4321,5678 til 4321,57 eller 4300. Desuden indeholder mange sprog en "printf"-funktion eller en lignende strengformateringsfunktion, som gør det muligt at konvertere et brøktal til en streng, der er afrundet til et brugerbestemt antal decimaler (præcisionen). På den anden side er trunkering (afrunding til nul) stadig den standardafrundingsmetode, der anvendes af mange sprog, især ved division af to heltalsværdier.

Omvendt definerer CSS og SVG ikke nogen specifik maksimal præcision for tal og målinger, der behandles og eksponeres i deres Document Object Model og i deres grænseflade til beskrivelsessprog som strenge, som om de havde uendelig præcision, og de skelner ikke mellem heltal og flydende punktværdier; implementeringerne af disse sprog vil dog typisk konvertere disse tal til IEEE-754 dobbelt flydende punktværdier, før de beregnede tal eksponeres med en begrænset præcision (især i standard Javascript- eller ECMAScript-grænsefladebindinger).


 

Andre afrundingsstandarder

Nogle fagområder eller institutioner har udstedt standarder eller direktiver for afrunding.

Vejrobservationer i USA

I en vejledning, der blev udsendt i midten af 1966, fastslog det amerikanske Office of the Federal Coordinator for Meteorology, at vejrdata skulle afrundes til det nærmeste runde tal, med reglen om at "runde halvdelen op" for at bryde uafgjort. F.eks. skal 1,5 afrundet til heltal blive til 2, og -1,5 skal blive til -1. Før denne dato var den afgørende regel "afrundet halvt væk fra nul".

Negativt nul i meteorologi

Nogle meteorologer kan skrive "-0" for at angive en temperatur mellem 0,0 og -0,5 grader (eksklusivt), som er afrundet til heltal. Denne notation anvendes, når det negative tegn anses for vigtigt, uanset hvor lille størrelsen er, f.eks. ved afrunding af temperaturer på Celsius-skalaen, hvor temperaturer under nul indikerer frysepunktet.


 

Relaterede sider

 

Spørgsmål og svar

Spørgsmål: Hvad betyder ordet "afrunding"?


A: Afrunding er at erstatte en numerisk værdi med en anden værdi, der er omtrent lige stor, men som har en kortere, enklere eller mere eksplicit form.

Spørgsmål: Hvad er et eksempel på afrunding?


A: Et eksempel på afrunding er, at 23,74 USD afrundes til 24 USD, at brøken 312/937 afrundes til 1/3, og at udtrykket 2 {\displaystyle {\sqrt {2}}}} afrundes til 1,41.

Sp: Hvorfor afrunder vi tal?


A: Vi afrunder tal for at opnå en værdi, der er lettere at skrive og håndtere end den oprindelige. Det kan også ske for at angive nøjagtigheden af et beregnet tal.

Spørgsmål: Hvad er nogle potentielle problemer ved afrunding?


A: Afrunding kan medføre en vis afrundingsfejl som følge heraf, og i visse tilfælde kan det gøre resultatet meningsløst på grund af fejl, der akkumuleres over tid i beregninger. Desuden kan det være vanskeligt at foretage nøjagtig afrunding af transcendentale matematiske funktioner, fordi det ikke er muligt på forhånd at vide, hvor mange ekstra cifre der skal beregnes for at afgøre, om der skal afrundes opad eller nedad.

Spørgsmål: Hvordan hænger afrunding sammen med kvantisering?


Svar: A: Afrunding har mange ligheder med kvantisering, som forekommer, når fysiske størrelser skal kodes med tal eller digitale signaler.

AlegsaOnline.com - 2020 / 2023 - License CC3