Avrundning | ett numeriskt värde innebär att ersätta det med ett annat värde som är ungefär lika stort

Ordet "avrundning" för ett numeriskt värde innebär att man ersätter det med ett annat värde som är ungefär lika stort men som har en kortare, enklare eller tydligare form. Till exempel kan 23,74 US-dollar avrundas till 24 US-dollar, bråket 312/937 avrundas till 1/3 och uttrycket {\displaystyle {\sqrt {2}}} avrundas till 1,41.

Avrundning görs ofta med avsikt för att få ett värde som är lättare att skriva och hantera än det ursprungliga värdet. Det kan också göras för att ange noggrannheten hos ett beräknat tal, t.ex. en kvantitet som beräknats till 123 456, men som man vet är exakt endast inom några hundra enheter, kan bättre anges som "ungefär 123 500".

Å andra sidan kan avrundning ge upphov till avrundningsfel. Avrundning är nästan oundviklig i många beräkningar, särskilt när man delar två tal i heltal eller gör aritmetik med fast punkt, när man beräknar matematiska funktioner som kvadratrötter, logaritmer och sinus, eller när man använder en representation med flytande punkter med ett fast antal signifikanta siffror. I en sekvens av beräkningar ackumuleras dessa avrundningsfel i allmänhet, och i vissa "olämpliga" fall kan de göra resultatet meningslöst.

Det är svårt att avrunda transcendentala matematiska funktioner exakt, eftersom man inte kan veta i förväg hur många extra siffror som måste beräknas för att avgöra om man ska avrunda uppåt eller nedåt. Detta problem är känt som "tabellmakarnas dilemma" (nedan).

Avrundning har många likheter med den kvantisering som sker när fysiska storheter måste kodas med siffror eller digitala signaler.




 

Typer av avrundning

Typiska avrundningsproblem kan vara:

  • Att approximera ett irrationellt tal med en bråkdel. Till exempel π med 22/7.
  • Approximera ett bråk med periodisk decimalutvidgning med ett ändligt decimalbråk. Till exempel 5/3 med 1,6667.
  • Ersätta ett rationellt tal med ett bråk med mindre täljare och nämnare. Till exempel 3122/9417 med 1/3.
  • Ersätta ett bråkigt decimaltal med ett med färre siffror. Till exempel 2,1784 dollar med 2,18 dollar.
  • Ersätta ett decimalt heltal med ett heltal med fler efterföljande nollor. Till exempel. 23 217 personer med 23 200 personer.
  • Att ersätta ett värde med en multipel av ett angivet belopp. Till exempel. 27,2 sekunder med 30 sekunder (en multipel av 15).

 

Avrundning till en angiven ökning

Den vanligaste typen av avrundning är att avrunda till ett heltal eller, mer allmänt, till en heltalsmultipel av någon ökning, t.ex. avrundning till hela tiondelar av sekunder, hundradelar av en dollar, till hela multiplar av 1/2 eller 1/8 tum, till hela dussin eller tusen, osv.

I allmänhet innebär avrundning av ett tal x till en multipel av en viss bestämd ökning m följande steg:

  1. Divider x med m, och resultatet blir y;
  2. Avrunda y till ett heltal och kalla det q;
  3. Multiplicera q med m för att få det avrundade värdet z.

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

Om man till exempel avrundar x = 2,1784 dollar till hela cent (dvs. till en multipel av 0,01) måste man beräkna y = x/m = 2,1784/0,01 = 217,84, sedan avrunda y till heltalet q = 218 och slutligen beräkna z = q×m = 218×0,01 = 2,18.

Vid avrundning till ett förutbestämt antal signifikanta siffror beror ökningen m på storleken på det tal som ska avrundas (eller på det avrundade resultatet).

Ökningen m är normalt en ändlig bråkdel i det numeriska system som används för att representera talen. När det gäller visning för människor innebär det vanligtvis decimaltalsystemet (dvs. m är ett heltal gånger en tiopotens, som 1/1000 eller 25/100). För mellanvärden som lagras i digitala datorer innebär det ofta det binära talsystemet (m är ett heltal gånger en potens av 2).

Den abstrakta funktionen "round()" med ett enda argument som returnerar ett heltal från ett godtyckligt reellt värde har minst ett dussin olika konkreta definitioner som presenteras i avsnittet om avrundning till heltal. Den abstrakta funktionen "round()" med två argument definieras formellt här, men i många fall används den med det implicita värdet m = 1 för ökningen och reduceras sedan till den motsvarande abstrakta funktionen med ett argument, med samma dussintal olika konkreta definitioner.


 

Avrundning till heltal

Den mest grundläggande formen av avrundning är att ersätta ett godtyckligt tal med ett heltal. Alla följande avrundningsformer är konkreta implementeringar av den abstrakta funktionen "round()" med ett enda argument som presenterades och användes i de föregående avsnitten.

Det finns många sätt att avrunda ett tal y till ett heltal q. De vanligaste är följande

  • Avrunda nedåt (eller ta golvet, eller avrunda mot minus oändligheten): q är det största heltal som inte överstiger y.

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

  • Avrunda uppåt (eller ta taket, eller avrunda mot plus oändligheten): q är det minsta heltal som inte är mindre än y.

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

  • Avrunda mot noll (eller avrunda, eller avrunda bort från oändligheten): q är heltalsdelen av y, utan dess bråksiffror.

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

  • Avrunda från noll (eller avrunda mot oändligheten): om y är ett heltal är q y, annars är q det heltal som är närmast 0 och som är sådant att y ligger mellan 0 och q.

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

  • Avrunda till närmaste: q är det heltal som ligger närmast y. Detta skrivs ibland som {\displaystyle q=\lfloor y\rceil } (se nedan för regler för att bryta oavgjort).

De fyra första metoderna kallas riktad avrundning, eftersom förskjutningarna från det ursprungliga talet y till det avrundade värdet q alla är riktade mot eller bort från samma gränsvärde (0, +∞ eller -∞).

Om y är positivt är avrundning nedåt samma sak som avrundning mot noll och avrundning uppåt samma sak som avrundning bort från noll. Om y är negativ är avrundning nedåt samma sak som avrundning bort från noll och avrundning uppåt samma sak som avrundning mot noll. Om y är heltal är q i alla fall bara y. Följande tabell illustrerar dessa avrundningsmetoder:

y

avrunda
nedåt
(mot -∞)


avrundning
(mot +∞)

avrunda
mot
noll

avrunda
från
noll

avrunda
till
närmaste

+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 många beräkningar görs i en följd kan valet av avrundningsmetod ha en mycket stor inverkan på resultatet. Ett berömt exempel gäller ett nytt index som inrättades av Vancouver Stock Exchange 1982. Det sattes till en början till 1 000 000 och hade efter 22 månader sjunkit till cirka 520 - medan aktiekurserna i allmänhet hade ökat under perioden. Problemet berodde på att indexet räknades om tusentals gånger dagligen och alltid avrundades ner till tre decimaler, på ett sådant sätt att avrundningsfelen ackumulerades. En omräkning med bättre avrundning gav ett indexvärde på 1098,892 i slutet av samma period.


 

För att avgöra om det är oavgjort

För att avrunda ett tal y till närmaste heltal krävs en regel för att avgöra om det finns ett lika stort antal för de fall då y är exakt halvvägs mellan två heltal - det vill säga när bråkdelen av y är exakt 0,5.

Runda upp till hälften

Följande regel för att avgöra oavgjort resultat, som kallas "round half up" (eller "round half towards plus infinity"), används ofta inom många discipliner. Det innebär att halva värden y alltid avrundas uppåt.

  • Om bråkdelen av y är exakt 0,5 är q = y + 0,5.

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

Med denna regel avrundas till exempel värdet 23,5 till 24, men -23,5 avrundas till -23.

Detta är en av två regler som vanligtvis lärs ut i amerikanska grundskoleklasser i matematik.

Om det inte vore för 0,5 bråkdelar skulle de avrundningsfel som införs genom avrundningsmetoden vara ganska symmetriska: för varje bråkdel som avrundas uppåt (t.ex. 0,268) finns det en motsvarande bråkdel (nämligen 0,732) som avrundas nedåt, med samma belopp. När man avrundar en stor uppsättning tal med slumpmässiga bråkdelar skulle dessa avrundningsfel statistiskt sett kompensera varandra, och det förväntade (genomsnittliga) värdet av de avrundade talen skulle vara lika med det förväntade värdet av de ursprungliga talen.

Regeln om att avrunda halva talet uppåt är dock inte symmetrisk, eftersom bråkdelar som är exakt 0,5 alltid avrundas uppåt. Denna asymmetri medför en positiv bias i avrundningsfelen. Om till exempel bråket y består av tre slumpmässiga decimalsiffror kommer det förväntade värdet av q att vara 0,0005 högre än det förväntade värdet av y. Av denna anledning kallas avrundning med regeln avrunda hälften uppåt också (tvetydigt) för asymmetrisk avrundning.

Ett skäl till att avrunda uppåt till 0,5 är att endast en siffra behöver granskas. När man till exempel ser 17,50000..., så är de tre första siffrorna, 17,5, avgörande för att siffran ska avrundas uppåt till 18. Om den motsatta regeln användes (avrunda hälften nedåt) skulle alla noll decimaler behöva undersökas för att avgöra om värdet är exakt 17,5.

Runda halvt ner

Man kan också använda rundning av halva nedåt (eller rundning av halva mot minus oändligheten) i motsats till den vanligare rundning av halva uppåt (metoden rundning av halva uppåt är en vanlig konvention, men är inget annat än en konvention).

  • Om bråkdelen av y är exakt 0,5 är q = y - 0,5.

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

Exempelvis avrundas 23,5 till 23 och -23,5 till -24.

Regeln om att avrunda hälften nedåt för att avgöra lika antal är inte symmetrisk, eftersom bråkdelar som är exakt 0,5 alltid avrundas nedåt. Denna asymmetri medför en negativ bias i avrundningsfelen. Om till exempel bråket y består av tre slumpmässiga decimalsiffror kommer det förväntade värdet av q att vara 0,0005 lägre än det förväntade värdet av y. Av denna anledning kallas avrundning med regeln avrunda hälften nedåt också (tvetydigt) för asymmetrisk avrundning.

Runda halva från noll

Den andra metoden som ofta lärs ut och används är att runda hälften från noll (eller runda hälften mot oändligheten), nämligen:

  • Om bråkdelen av y är exakt 0,5 är q = y + 0,5 om y är positiv och q = y - 0,5 om y är 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 \,}

Exempelvis avrundas 23,5 till 24 och -23,5 till -24.

Denna metod behandlar positiva och negativa värden symmetriskt och är därför fri från övergripande fördomar om de ursprungliga siffrorna är positiva eller negativa med samma sannolikhet. Denna regel medför dock fortfarande en positiv bias för positiva tal och en negativ bias för negativa tal.

Det används ofta vid valutaomräkningar och prisavrundningar (när beloppet först räknas om till den minsta signifikanta underavdelningen av valutan, t.ex. cent av en euro) eftersom det är lätt att förklara genom att bara ta hänsyn till den första bråksiffran, oberoende av ytterligare precisionssiffror eller beloppets tecken (för strikt likvärdighet mellan betalare och mottagare av beloppet).

Runda halva mot noll

Man kan också avrunda hälften mot noll (eller runda hälften bort från oändligheten) i motsats till den vanligare metoden att runda hälften bort från noll (metoden att runda hälften bort från noll är en vanlig konvention, men är inget annat än en konvention).

  • Om bråkdelen av y är exakt 0,5 är q = y - 0,5 om y är positiv och q = y + 0,5 om y är 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 \,}

Exempelvis avrundas 23,5 till 23 och -23,5 till -23.

Denna metod behandlar också positiva och negativa värden symmetriskt och är därför fri från övergripande fördomar om de ursprungliga siffrorna är positiva eller negativa med samma sannolikhet. Denna regel medför dock fortfarande en negativ bias för positiva tal och en positiv bias för negativa tal.

Avrunda halva till jämna tal

En regel som är ännu mindre partisk är att runda hälften till jämnt, nämligen

  • Om bråkdelen av y är 0,5 är q det jämna heltal som ligger närmast y.

Exempelvis blir +23,5 +24, +22,5 +22, -22,5 -22 och -23,5 -24.

Denna metod behandlar också positiva och negativa värden symmetriskt och är därför fri från övergripande fördomar om de ursprungliga siffrorna är positiva eller negativa med samma sannolikhet. För de flesta rimliga fördelningar av y-värdena är dessutom det förväntade (genomsnittliga) värdet av de avrundade talen i stort sett detsamma som värdet av de ursprungliga talen, även om de senare är alla positiva (eller alla negativa). Denna regel kommer dock fortfarande att ge en positiv bias för jämna tal (inklusive noll) och en negativ bias för udda tal.

Denna variant av metoden "runda till närmaste" kallas också för "unbiased rounding" (tvetydigt och lite olämpligt), konvergerande avrundning, statistikers avrundning, holländsk avrundning, gaussisk avrundning eller bankers avrundning. Detta används ofta inom bokföringen.

Detta är det standardavrundningsläge som används i IEEE 754-beräkningsfunktioner och operatörer.

Avrunda hälften till udda

En annan regel för att avgöra lika antal röster som är mycket lik den som gäller för att avrunda hälften till jämnt antal, nämligen

  • Om bråkdelen av y är 0,5 är q det udda heltal som ligger närmast y.

Exempelvis blir +22,5 +23, +21,5 +21, -21,5 -21 och -22,5 -23.

Denna metod behandlar också positiva och negativa värden symmetriskt och är därför fri från övergripande fördomar om de ursprungliga siffrorna är positiva eller negativa med samma sannolikhet. För de flesta rimliga fördelningar av y-värdena är dessutom det förväntade (genomsnittliga) värdet av de avrundade talen i stort sett detsamma som värdet av de ursprungliga talen, även om de senare är alla positiva (eller alla negativa). Denna regel kommer dock fortfarande att ge en negativ bias för jämna tal (inklusive noll) och en positiv bias för udda tal.

Denna variant används nästan aldrig i de flesta beräkningar, utom i situationer där man vill undvika att avrunda 0,5 eller -0,5 till noll, eller undvika att öka skalan för tal som representeras som flyttal (med begränsade intervall för skalningsexponenten), så att ett icke oändligt tal avrundas till oändligt, eller att ett litet denormalt värde avrundas till ett normalt värde som inte är noll (detta kan inträffa med läget avrunda halvt till jämnt). I praktiken föredrar detta läge att bevara den befintliga skalan för slipsnummer och att undvika resultat utanför intervallet när det är möjligt.

Stokastisk avrundning

En annan metod för att lösa oavvisliga oavgjorda oavgjorda olikheter är stokastisk avrundning:

  • Om bråkdelen av y är 0,5, välj q slumpmässigt bland y + 0,5 och y - 0,5, med samma sannolikhet.

Liksom rund-halv-till-jämnt är denna regel i huvudsak fri från övergripande förskjutningar, men den är också rättvis bland jämna och udda q-värden. Å andra sidan införs en slumpmässig komponent i resultatet; att utföra samma beräkning två gånger på samma data kan ge två olika resultat. Det är också öppet för omedveten bias om människor (snarare än datorer eller slumpmässiga anordningar) "slumpmässigt" beslutar i vilken riktning avrundningen skall ske.

Växelvis likabehandling

En metod, som är mer dold än de flesta, är att runda halva halvan växelvis.

  • Om bråkdelen är 0,5 ska du växelvis avrunda uppåt och nedåt: för den första förekomsten av en bråkdel på 0,5 ska du avrunda uppåt, för den andra förekomsten ska du avrunda nedåt, och så vidare och så vidare.

På så sätt kan slumpmässiga inslag i resultatet undvikas, om förekomster av 0,5 bråkdelar kan numreras effektivt. Men det kan fortfarande ge en positiv eller negativ snedvridning beroende på vilken avrundningsriktning som tilldelas den första förekomsten, om det totala antalet förekomster är udda.


 

Enkel dithering

I vissa sammanhang kan alla avrundningsmetoder ovan vara otillfredsställande. Anta till exempel att y är en exakt mätning av en ljudsignal som avrundas till ett heltal q för att minska lagrings- eller överföringskostnaderna. Om y förändras långsamt med tiden kommer någon av avrundningsmetoderna ovan att resultera i att q är helt konstant under långa intervaller, åtskilda av plötsliga hopp på ±1. När q-signalen spelas upp kommer dessa steg att höras som ett mycket obehagligt brus, och alla variationer i den ursprungliga signalen mellan två heltalsvärden kommer att vara helt förlorade.

Ett sätt att undvika detta problem är att avrunda varje värde y uppåt med en sannolikhet som är lika stor som dess bråkdel, och avrunda det nedåt med komplementet till denna sannolikhet. T.ex. skulle talet 23,17 avrundas uppåt till 24 med sannolikheten 0,17 och nedåt till 23 med sannolikheten 1 - 0,17 = 0,83. (Detta är likvärdigt med att avrunda neråt y + s, där s är ett slumpmässigt tal som är jämnt fördelat mellan 0 och 1). Med denna speciella avrundning, som kallas dithering, ersätts de plötsliga stegen av ett mindre störande brus, och även små variationer i den ursprungliga signalen bevaras i viss utsträckning. Liksom det stokastiska tillvägagångssättet för avrundning av lika många tal har dithering ingen bias: om alla bråkvärden är lika sannolika är det lika sannolikt att avrunda uppåt med ett visst belopp som att avrunda nedåt med samma belopp, och detsamma gäller för summan av flera avrundade tal. Å andra sidan medför dithering en slumpmässig komponent i resultatet, som är mycket större än för stokastisk tiebreaking.

Mer exakt kommer avrundningsfelet för varje dithered tal att vara en jämnt fördelad slumpvariabel med medelvärdet noll, men med standardavvikelsen {\displaystyle 1/{\sqrt {12}}\approx 0.2886}, vilket är bättre än standardavvikelsen 1/2 med de enkla prediktiva metoderna, men något högre än med den enklare stokastiska metoden. Summan av n avrundade tal kommer dock att vara en slumpmässig variabel med förväntat fel noll, men med standardavvikelsen {\displaystyle {\sqrt {n}}/{\sqrt {12}}} (det totala återstående bruset) som avviker halvkvadratiskt och kan bli lätt märkbar, även om standardavvikelsen för avrundningsfelet per prov är {\displaystyle 1/{\sqrt {12n}}} som långsamt konvergerar halvkvadratiskt mot noll. Så denna slumpmässiga fördelning kan fortfarande vara för hög för vissa tillämpningar som avrundar många data.


 

Multidimensionell dithering

Denna variant av den enkla ditheringmetoden avrundar fortfarande värden med en sannolikhet som är lika stor som bråkdelen. I stället för att använda en slumpmässig fördelning för avrundning av isolerade prov, summeras avrundningsfelet som uppstår vid varje avrundat prov för nästa omgivande element som skall provtas eller beräknas. Detta ackumulerade värde läggs sedan till värdet av dessa nästa provtagna eller beräknade värden som skall avrundas, så att de modifierade värdena kommer att ta hänsyn till denna skillnad med hjälp av en prediktiv modell (t.ex. Floyd-Steinberg dithering).

De modifierade värdena avrundas sedan med någon av ovanstående avrundningsmetoder, varav de bästa är stokastiska metoder eller ditheringmetoder: i det sistnämnda fallet kommer summan av n avrundade tal fortfarande att vara en slumpmässig variabel med ett förväntat fel på noll, men med en utmärkt konstant standardavvikelse på {\displaystyle 1/{\sqrt {12}}}och den totala genomsnittliga avrundningsfelavvikelsen per avrundat prov kommer att vara {\displaystyle 1/(n{\sqrt {12}})} som kommer att konvergera hyperboliskt mot noll, snabbare än med den halvhyperboliska konvergensen vid avrundning av isolerade prov.

I praktiken, när man avrundar stora uppsättningar samplade data (t.ex. ljud-, bild- och videorendering), används ackumuleringen av avrundningsfel oftast med en enkel prediktiv avrundning av de modifierade värdena (t.ex. avrundning mot noll), eftersom det fortfarande kommer att bevara den hyperboliska konvergensen mot noll för den totala genomsnittliga avrundningsfelbias och dess standardavvikelse. Denna förbättring används ofta vid bild- och ljudbehandling (särskilt för noggrann omskalning och antialiasing, där enkel probabilistisk dithering av isolerade värden fortfarande kan ge märkbart brus, ibland till och med värre än de moiré-effekter som uppstår med enkla icke-probabilistiska avrundningsmetoder som tillämpas på isolerade prover).

Den effektiva spridningen av ackumulerade avrundningsfel kan bero på den diskreta dimensionen av de samplade data som ska avrundas: vid sampling av tvådimensionella bilder, inklusive färgade bilder (som lägger till den diskreta dimensionen av färgplan), eller tredimensionella videor (som lägger till en diskret tidsdimension), eller på polyfoniska ljuddata (som använder tids- och kanaldiskreta dimensioner), kan det fortfarande vara att föredra att sprida felet i en önskad riktning, eller lika mycket i flera ortogonala dimensioner, t.ex. vertikalt mot vertikalt. horisontellt för tvådimensionella bilder, eller i parallella färgkanaler vid samma position och/eller tidsstämpel, och beroende på andra egenskaper hos dessa ortogonala diskreta dimensioner (enligt en perceptionsmodell). I dessa fall kan flera avrundningsfelackumulatorer användas (minst en för varje diskret dimension), eller en (n-1)-dimensionell vektor (eller matris) av ackumulatorer.

I vissa av dessa fall kan de diskreta dimensionerna av de data som ska provtas och avrundas behandlas på ett icke ortogonalt sätt: När man arbetar med färgade bilder kan t.ex. de trikromatiska färgplanens data i varje fysisk dimension (höjd, bredd och eventuellt tid) omplaceras med hjälp av en perceptiv färgmodell, så att avrundningsfelackumulatorerna utformas så att de med större sannolikhet bevarar ljushet än färgton eller mättnad, i stället för att sprida fel i varje ortogonalt färgplan oberoende av varandra; I stereofoniska ljuddata kan de två avrundade datakanalerna (vänster och höger) avrundas tillsammans för att bevara deras medelvärde framför deras effektiva skillnad som kommer att absorbera de flesta av de återstående avrundningsfelen, på ett balanserat sätt runt noll.


 

Avrundning till enkla bråk

I vissa sammanhang är det önskvärt att avrunda ett givet tal x till ett "snyggt" bråk - det vill säga det närmaste bråk z = m/n vars täljare m och nämnare n inte överskrider ett visst maximum. Detta problem skiljer sig ganska mycket från problemet att avrunda ett värde till ett fast antal decimala eller binära siffror, eller till en multipel av en given enhet m. Detta problem är relaterat till Farey-sekvenser, Stern-Brocot-trädet och fortsatta bråk.


 

Skalad avrundning

Denna typ av avrundning, som också kallas avrundning till en logaritmisk skala, är en variant av avrundning till ett specificerat steg, men med ett steg som ändras beroende på resultatets skala och storlek. Konkret är avsikten att begränsa antalet signifikanta siffror genom att avrunda värdet så att icke signifikanta siffror faller bort. Den här typen av avrundning förekommer implicit med tal som beräknas med flyttalvärden med begränsad precision (t.ex. IEEE-754 float- och double-typer), men den kan användas mer generellt för att avrunda alla reella värden med ett positivt antal signifikanta siffror och en strikt positiv reell bas.

Det kan till exempel användas i teknisk grafik för att representera data med en logaritmisk skala med variabla steg (till exempel våglängder, vars bas inte nödvändigtvis är ett heltal), eller i statistiska data för att definiera klasser av reella värden inom intervaller med exponentiellt ökande bredder (men den vanligaste användningen är med heltalsbaser som 10 eller 2).

Denna typ av avrundning baseras på en logaritmisk skala som definieras av en fast reell skalningsfaktor s som inte är noll (i de vanligaste fallen är denna faktor s=1) och en fast positiv bas b>1 (som inte nödvändigtvis är ett heltal och som oftast skiljer sig från skalningsfaktorn), och ett fast heltal n>0 av signifikanta siffror i den basen (vilket kommer att bestämma värdet på den ökning som ska användas för avrundning, tillsammans med den beräknade effektiva skalan för det avrundade talet).

Det primära argumentet (liksom det avrundade talet) representeras först i exponentiell notation x = s-a-m-bc , så att tecknet s är antingen +1 eller -1, den absoluta mantissan a är begränsad till det halvöppna positiva intervallet [1/b,1] och exponenten c är ett valfritt (positivt eller negativt) heltal. I denna representation finns alla signifikanta siffror i den bråkiga delen av den absoluta mantissan vars heltalsdel alltid är noll.

Om källtalet (eller det avrundade talet) är 0, definieras den absoluta mantissan a som 0, exponenten c fastställs till ett godtyckligt värde (0 i de flesta konventioner, men vissa flyttalrepresentationer kan inte använda en absolut mantissa som är noll utan reserverar ett specifikt maximalt negativt värde för exponenten c för att representera själva talet 0), Tecknet s kan väljas godtyckligt mellan -1 och +1 (det sätts i allmänhet till +1 för enkel nolla, eller så sätts det till samma tecken som argumentet i det avrundade värdet om talrepresentationen gör det möjligt att skilja mellan positiva och negativa nollor, även om de i slutändan representerar samma numeriska värde 0).

En skalad exponentiell representation som x = a-s-bc kan också användas på motsvarande sätt, med en signerad mantissa a som antingen är lika med noll eller ligger inom ett av de två halvöppna intervallen (-1,-1/b] och [+1/b,+1), och detta kommer att vara fallet i algoritmen nedan.

Stegen för att beräkna denna skalade avrundning liknar i allmänhet följande:

  1. Om x är lika med noll, återge x, annars:
  2. konvertera x till den skalade exponentialrepresentationen, med en signerad mantissa:
    {\displaystyle x=a\cdot s\cdot b^{c}\,}
    1. Låt x' vara det oskalade värdet av x, genom att dividera det med skalningsfaktorn s:
      {\displaystyle x'=x/s\,} ;
    2. Låt skalningsexponenten c vara ett plus bas-b-logaritmen av x' absoluta värde, avrundat nedåt till ett heltal (mot minus oändligheten):
      {\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|\right\rfloor \,} ;
    3. Låt den signerade mantissan a vara en produkt av x' dividerad med b till potensen c:
      {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,}
  3. beräkna det avrundade värdet i denna representation:
    1. Låt c' vara den ursprungliga skalningsexponenten c för x':
      {\displaystyle c'=c\,}
    2. Låt m vara ökningen för avrundning av mantissa a enligt antalet signifikanta siffror som ska behållas:
      {\displaystyle m=b^{-n}\,}
    3. Låt a' vara den signerade mantissan a avrundad enligt denna ökning m och det valda avrundningsläget:
      {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'})\cdot b^{-n}\,}
    4. Om det absoluta värdet av a' inte är lägre än b, minskas n (multiplicera ökningen m med b), ökas skalningsexponenten c', divideras den signerade mantissan a med b, och avrundningen av den nya signerade mantissan a till a' återupptas med samma formel; detta steg kan endast undvikas om abtract-funktionen "round()" alltid avrundar a mot 0 (dvs.Det är dock nödvändigt om den avrundar a mot oändligheten, eftersom den avrundade mantissan kan ha en högre skalningsexponent i detta fall, vilket ger en extra siffra av precision.
  4. återger det avrundade värdet:
    {\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}\,} .

För den abstrakta funktionen "round()" kan denna typ av avrundning använda någon av de avrundningsmetoder för heltal som beskrivs mer utförligt i nästa avsnitt, men det är oftast avrundningsmetoden för närmast föregående (med regler för att bryta oavgjort resultat som också beskrivs mer utförligt nedan).

Till exempel:

  • Den skalade avrundningen av 1,234 med skalfaktor 1 i bas 10 och 3 signifikanta siffror (maximal relativ precision=1/1000), när man använder något avrundningsläge, ger 1,23;
  • En liknande avrundning av 1,236 ger 1,24;
  • En liknande avrundning av 21,236 ger 21,2;
  • En liknande skalad avrundning av 321.236 ger 321;
  • Den skalade avrundningen av 1,234 skalningsfaktor 1 i bas 10 och 3 signifikanta siffror (maximal relativ precision=1/1000), när man använder avrundningsläget, ger 1,23;
  • En liknande skalad avrundning av 1,236 ger också 1,23;
  • den skalade avrundningen av {\displaystyle \scriptstyle 3\pi /7\;\approx \;6.8571\cdot \pi \cdot 2^{-4}} med skalningsfaktor {\displaystyle \scriptstyle \pi } i bas 2 och 3 signifikanta siffror (maximal relativ precision=1/8), när man använder avrundningsläget, ger {\displaystyle \scriptstyle 6\cdot \pi \cdot 2^{-4}\;=\;3\pi /8} ;
  • liknande skalad avrundning av {\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}} ger {\displaystyle \scriptstyle 5\cdot \pi \cdot 2^{-3}\;=\;5\pi /8} ;
  • liknande skalad avrundning av {\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}} ger {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • En liknande skalad avrundning av {\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}} kommer också att ge {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • liknande skalad avrundning av {\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}} ger {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}.

 

Avrunda till tillgängligt värde

Färdigt virke, skrivpapper, kondensatorer och många andra produkter säljs vanligtvis i endast några få standardstorlekar.

Många konstruktionsförfaranden beskriver hur man beräknar ett ungefärligt värde och sedan "avrundar" till en standardstorlek med fraser som "avrunda nedåt till närmaste standardvärde", "avrunda uppåt till närmaste standardvärde" eller "avrunda till närmaste standardvärde".

När en uppsättning önskade värden är jämnt fördelade på en logaritmisk skala kan valet av det närmaste önskade värdet till ett givet värde ses som ett slags avrundning i skala. Sådana "avrundade" värden kan beräknas direkt.


 

Avrundning med flytande punkter

I aritmetik med flytande punkter syftar avrundning till att omvandla ett givet värde x till ett värde z med ett visst antal signifikanta siffror. Med andra ord ska z vara en multipel av ett tal m som beror på storleken på z. Talet m är en potens av basen (vanligtvis 2 eller 10) för flyttalsformen.

Bortsett från denna detalj gäller alla varianter av avrundning som diskuterats ovan även för avrundning av flyttalstal. Algoritmen för sådan avrundning presenteras i avsnittet Skalad avrundning ovan, men med en konstant skalningsfaktor s=1 och en heltalsbas b>1.

För resultat där det avrundade resultatet skulle överlöpa är resultatet för en riktad avrundning antingen den lämpliga undertecknade oändligheten eller det högsta representativa positiva ändliga talet (eller det lägsta representativa negativa ändliga talet om x är negativt), beroende på riktningen för avrundningen. Resultatet av ett överskridande för det vanliga fallet med avrundning till jämnt tal är alltid den lämpliga oändligheten.

Dessutom, om det avrundade resultatet skulle vara underflödigt, dvs. om exponenten skulle överskrida det lägsta representerbara heltalsvärdet, kan det faktiska resultatet vara antingen noll (eventuellt signerat om representationen kan upprätthålla en skillnad mellan tecken för nollor), eller det minsta representerbara positiva finita talet (eller det högsta representerbara negativa finita talet om x är negativt), eventuellt ett denormalt positivt eller negativt tal (om mantisan lagrar alla sina signifikanta siffror), i vilket fall den mest signifikanta siffran fortfarande kan lagras i en lägre position genom att de högsta lagrade siffrorna sätts till noll, och denna lagrade mantissa släpper inte den mest signifikanta siffran, något som är möjligt när basen b=2 eftersom den mest signifikanta siffran alltid är 1 i den basen), beroende på avrundningsriktningen. Resultatet av ett underflöde för det vanliga fallet med avrundning till jämnt värde är alltid den lämpliga nollan.


 

Dubbel avrundning

Att avrunda ett tal två gånger i följd med olika precisioner, där den senare precisionen är grövre, ger inte garanterat samma resultat som att avrunda en gång till den slutliga precisionen, utom i fallet med riktad avrundning. Till exempel ger avrundning av 9,46 till en decimal 9,5 och sedan 10 när man avrundar till heltal med hjälp av avrundning av hälften till jämnt, men skulle ge 9 när man avrundar till heltal direkt.

Vissa datorspråk och IEEE 754-2008-standarden föreskriver att resultatet i enkla beräkningar inte ska avrundas två gånger. Detta har varit ett särskilt problem med Java eftersom det är utformat för att köras identiskt på olika maskiner, och särskilda programmeringsknep har behövt användas för att uppnå detta med x87-flytande punkter. Java-språket ändrades så att det tillåter olika resultat när skillnaden inte spelar någon roll och kräver att en "strictfp"-kvalificering används när resultaten måste överensstämma exakt.


 

Exakt beräkning med avrundad aritmetik

Det är möjligt att använda avrundad aritmetik för att utvärdera det exakta värdet av en funktion med en diskret domän och ett diskret intervall. Om vi till exempel vet att ett heltal n är en perfekt kvadrat kan vi beräkna dess kvadratrot genom att konvertera n till ett flyttalvärde x, beräkna den ungefärliga kvadratroten y av x med flyttal och sedan avrunda y till närmaste heltal q. Om n inte är för stort kommer avrundningsfelet i y med flyttal att vara mindre än 0,5, så det avrundade värdet q blir den exakta kvadratroten av n. I de flesta moderna datorer kan denna metod vara mycket snabbare än att beräkna kvadratroten av n med en algoritm för heltal.


 

Bordstillverkarens dilemma

William Kahan myntade termen "The Table-Maker's Dilemma" för den okända kostnaden för avrundning av transcendentala funktioner:

"Ingen vet hur mycket det skulle kosta att beräkna y^w korrekt avrundat för varje två argument med flyttal där det inte över- eller underlöper. Istället beräknar välrenommerade matematikbibliotek elementära transcendentala funktioner oftast inom något mer än en halv ulp och nästan alltid väl inom en ulp. Varför kan Y^W inte avrundas inom en halv ulp som SQRT? Därför att ingen vet hur mycket beräkning det skulle kosta... Det finns inget generellt sätt att förutsäga hur många extra siffror som måste föras för att beräkna ett transcendentalt uttryck och avrunda det korrekt till ett förutbestämt antal siffror. Till och med det faktum (om det är sant) att ett ändligt antal extra siffror i slutändan kommer att räcka kan vara en djupgående sats."

IEEE-standarden för flytande punkter garanterar att addera, subtrahera, multiplicera, dividera, kvadrerar roten och restvärdet för flytande punkter ger det korrekt avrundade resultatet av operationen med oändlig precision. Ingen sådan garanti ges dock för mer komplexa funktioner och de är vanligtvis endast exakta till den sista biten i bästa fall.

Med hjälp av Gelfond-Schneider-satsen och Lindemann-Weierstrass-satsen kan det bevisas att många av de elementära standardfunktionerna ger transcendentala resultat när de ges rationella argument som inte är noll, och därför är det alltid möjligt att avrunda sådana funktioner korrekt. Att fastställa en gräns för en viss precision för hur exakta resultat som måste beräknas innan ett korrekt avrundat resultat kan garanteras kan dock kräva mycket beräkningstid.

Det finns numera några paket som erbjuder fullständig noggrannhet. MPFR-paketet ger korrekt avrundade resultat med godtycklig precision. IBM har skrivit ett paket för snabba och exakta IEEE-elementarfunktioner och i framtiden kan standardbiblioteken erbjuda sådan precision.

Det är möjligt att utforma väldefinierade beräkningsbara tal som det kanske aldrig går att avrunda korrekt oavsett hur många siffror som beräknas. Om till exempel Goldbachs gissning är sann men inte bevisbar är det omöjligt att korrekt avrunda 0,5 + 10-n där n är det första jämna talet större än 4 som inte är summan av två primtal, eller 0,5 om det inte finns något sådant tal. Detta kan dock approximeras till en given precision även om gissningen inte kan bevisas.


 

Historia

Begreppet avrundning är mycket gammalt, kanske till och med äldre än begreppet division. Vissa gamla lertavlor som hittats i Mesopotamien innehåller tabeller med avrundade värden för reciproka tal och kvadratrötter i basen 60. Avrundade approximationer av π, årets längd och månadens längd är också gamla.

Metoden "Round-to-even" har använts som ASTM-standard (E-29) sedan 1940. Ursprunget till termerna "obiased rounding" och "statistical rounding" är ganska självförklarande. I 1906 års fjärde upplaga av Probability and Theory of Errors kallade Robert Simpson Woodward detta för "the computer's rule", vilket tyder på att det då var vanligt förekommande bland mänskliga datorer som beräknade matematiska tabeller. Churchill Eisenharts artikel "Effects of Rounding or Grouping Data" från 1947 (i Selected Techniques of Statistical Analysis, McGrawHill, 1947, Eisenhart, Hastay och Wallis, redaktörer) visade att metoden redan var "väl etablerad" inom dataanalys.

Ursprunget till termen "bankernas avrundning" är mer oklart. Om denna avrundningsmetod någonsin var en standard inom bankväsendet har det visat sig vara extremt svårt att hitta bevis för detta. Tvärtom, avsnitt 2 i Europeiska kommissionens rapport The Introduction of the Euro and the Rounding of Currency Amounts visar att det tidigare inte funnits någon standardmetod för avrundning inom bankväsendet, och det anges att "halva" belopp skall avrundas uppåt.

Fram till 1980-talet var den avrundningsmetod som användes i aritmetik för datorer med flyttal vanligtvis fastställd av maskinvaran, dåligt dokumenterad, inkonsekvent och olika för varje märke och modell av dator. Denna situation förändrades efter att IEEE 754-standarden för flyttal antogs av de flesta datortillverkare. Standarden gör det möjligt för användaren att välja mellan flera avrundningslägen, och i varje fall specificeras exakt hur resultaten ska avrundas. Dessa funktioner gjorde numeriska beräkningar mer förutsägbara och maskinoberoende och möjliggjorde ett effektivt och konsekvent genomförande av intervallaritmetik.


 

Avrundningsfunktioner i programmeringsspråk

De flesta programmeringsspråk har funktioner eller särskild syntax för att avrunda bråksiffror på olika sätt. De tidigaste numeriska språken, såsom FORTRAN och C, tillhandahåller endast en metod, vanligtvis trunkering (mot noll). Denna standardmetod kan vara implicit i vissa sammanhang, t.ex. när man tilldelar ett bråktal till en heltalsvariabel eller använder ett bråktal som index i en matris. Andra typer av avrundning måste programmeras explicit; till exempel kan avrundning av ett positivt tal till närmaste heltal genomföras genom att lägga till 0,5 och trunkeras.

Under de senaste årtiondena har syntaxen och/eller standardbiblioteken i de flesta språk dock allmänt tillhandahållit åtminstone de fyra grundläggande avrundningsfunktionerna (uppåt/tak, nedåt/golv, till närmaste och mot noll). Metoden för avrundning kan variera beroende på språk och version och/eller kan väljas av programmeraren. Flera språk följer IEEE-754-standarden för flyttal och definierar dessa funktioner så att de tar emot ett argument av typen flyttal med dubbel precision och returnerar ett resultat av samma typ, som sedan kan konverteras till ett heltal om det behövs. Eftersom IEEE-formatet för dubbel precision har 52 bråkbitar kan detta tillvägagångssätt undvika falska överflöden i språk som har 32-bitars heltal. Vissa språk, t.ex. PHP, har funktioner som avrundar ett värde till ett visst antal decimaler, t.ex. från 4321,5678 till 4321,57 eller 4300. Dessutom tillhandahåller många språk en "printf"-funktion eller liknande strängformateringsfunktion, som gör det möjligt att konvertera ett bruttotal till en sträng, avrundat till ett användarspecificerat antal decimaler (precisionen). Å andra sidan är trunkering (avrundning till noll) fortfarande den standardavrundningsmetod som används av många språk, särskilt vid division av två heltalsvärden.

CSS och SVG definierar däremot ingen specifik maximal precision för siffror och mått, som behandlas och exponeras i deras dokumentobjektmodell och i deras gränssnitt för gränssnittsbeskrivningsspråk som strängar som om de hade oändlig precision, och gör ingen skillnad mellan heltal och flyttal. Implementationerna av dessa språk omvandlar dock vanligtvis dessa siffror till IEEE-754 dubbla flyttal innan de beräknade siffrorna exponeras med begränsad precision (särskilt inom standardgränssnittsbindningar för Javascript eller ECMAScript).


 

Andra avrundningsstandarder

Vissa discipliner eller institutioner har utfärdat standarder eller direktiv för avrundning.

Väderobservationer i USA

I en riktlinje som utfärdades i mitten av 1966 fastställde det amerikanska kontoret för den federala samordnaren för meteorologi att väderdata ska avrundas till närmaste avrundade tal, med regeln "avrunda hälften uppåt" för att lösa oavgjorda resultat. Till exempel ska 1,5 avrundat till heltal bli 2 och -1,5 ska bli -1. Före det datumet var regeln för avrundning av lika antal "avrunda hälften från noll".

Negativ nolla inom meteorologi

Vissa meteorologer kan skriva "-0" för att ange en temperatur mellan 0,0 och -0,5 grader (exklusive) som avrundats till heltal. Denna notation används när det negativa tecknet anses viktigt, oavsett hur liten storleken är, till exempel när man avrundar temperaturer på Celsiusskalan, där under noll innebär att man fryser.


 

Relaterade sidor

 

Frågor och svar

F: Vad betyder ordet "avrundning"?


S: Avrundning är att ersätta ett numeriskt värde med ett annat värde som är ungefär lika stort men som har en kortare, enklare eller tydligare form.

F: Vad är ett exempel på avrundning?


S: Ett exempel på avrundning är att 23,74 US-dollar avrundas till 24 US-dollar, att bråket 312/937 avrundas till 1/3 och att uttrycket 2 {\displaystyle {\sqrt {2}}} avrundas till 1,41.

F: Varför avrundar vi tal?


S: Vi avrundar tal för att få ett värde som är lättare att skriva och hantera än originalet. Det kan också göras för att ange noggrannheten hos ett beräknat tal.

F: Vilka är några potentiella problem med avrundning?


S: Avrundning kan ge upphov till vissa avrundningsfel som resultat och i vissa fall kan det göra resultatet meningslöst på grund av att fel ackumuleras över tiden i beräkningar. Dessutom kan exakt avrundning av transcendentala matematiska funktioner vara svårt eftersom det inte går att veta hur många extra siffror som måste beräknas för att lösa om man ska avrunda uppåt eller nedåt i förväg.

F: Hur förhåller sig avrundning till kvantisering?


S: Avrundning har många likheter med kvantisering som sker när fysiska storheter måste kodas med siffror eller digitala signaler.

AlegsaOnline.com - 2020 / 2023 - License CC3