Pyöristäminen

Luvun **pyöristäminen** eli **pyöristys** on luvun numeerisen arvon korvaaminen sen likiarvolla. Likiarvo on lyhyempi, yksinkertaisempi tai selvempi esitys luvusta – esim. desimaaliluku 23,4476 korvataan lyhyemmällä 23,45:llä, murtoluku 312/937 yksinkertaisemmalla 1/3:lla tai irrationaaliluku \sqrt 2 luvulla 1,41. Korvaaminen merkitään symbolilla ≈, esimerkiksi 13,5 ≈ 14.

## Johdanto
Lukuja pyöristetään, jotta saadaan helpommin kirjoitettava tai käsiteltävä arvo alkuperäiselle luvulle. Numeerisessa laskennassa lukuja on pyöristettävä, koska tietokoneen muistissa niille on varattu äärellinen määrä bittejä. Pyöristämällä voidaan lisäksi osoittaa lasku- tai mittaustuloksen tarkkuus – on saatu esim. tulos 123&nbsp;456, mutta sen tiedetään olevan tarkka vain sadan tarkkuudella, joten se pyöristetään lähimpään sataan eli 123&nbsp;500:aan. Lukujen pyöristäminen aiheuttaa pyöristysvirheitä laskutoimituksissa ja mittausdatan käsittelyssä. Laskutoimituksissa pyöristämistä on useimmiten mahdotonta välttää – esimerkkeinä π, neliöjuuret, logaritmit ja trigonometriset funktiot. Reaaliluvut muutetaan numeerisessa laskennassa liukuluvuiksi joko katkaisemalla tai pyöristämällä. Koska liukuluku on vain approksimaatio reaaliluvulle, pyöristysvirheet ovat väistämättömiä.

## Aritmeettiset pyöristyssäännöt
Pyöristämiseen liittyy käsite merkitsevät numerot. Merkitsevien numeroiden lukumäärään ei huomioida:

* kokonaisluvun lopussa olevia nollia
* desimaaliluvun alussa olevia nollia.

Muut numerot ovat merkitseviä.
Esim. 0,0220 (kolme merkitsevää numeroa) ja 5300 (kaksi merkitsevää numeroa).

Aritmeettisessa pyöristyksessä voi noudattaa monenlaisia sääntöjä. Yleisen, koulussakin opetettavan säännön mukaan:
* Jos ensimmäinen pois jätettävä numero on 5 tai suurempi, "korotetaan" viimeinen numero nollasta poispäin.

Halutusta lopputuloksesta riippuen voi pyöristää muillakin säännöillä, esim. pankkimaailmassa on pyritty vähentämään kumuloituvia pyöristysvirheitä pyöristämällä tasan keskelle jäävät arvot lähimpään parilliseen numeroon. Tietokoneohjelmoinnin yhteydessä taas on ikuinen vitsaus liukulukujen rajallinen käsittelytarkkuus ja siitä johtuva satunnainen 0,5 muuntuminen arvoksi 0,499999... Ilmiön vaikutusta voi vähentää katsomalla poisjätettävän numeron lisäksi myös sen seuraajaa (vaikka yleisen säännön mukaan sitä ei koskaan tehdä):
* Jos ensimmäinen pois jätettävä numero on yhtä suuri kuin 5, pyöristetään lähimpään parilliseen numeroon.
* Jos ensimmäinen pois jätettävä numero on 4 ja sitä seuraa 9, pyöristetään lähimpään parilliseen numeroon.
* Jos ensimmäinen pois jätettävä numero on suurempi kuin 5, korotus suoritetaan.

Esim. pyöristettäessä kolmen merkitsevän numeron tarkkuudelle:
* 1,22|4776 on pyöristettynä 1,22
* 1,29|694 on pyöristettynä 1,30
* 3,82|514 on pyöristettynä 3,83 
* 1,22|5017 on pyöristettynä 1,23
* 6,47|507 on pyöristettynä 6,48.
 
Negatiivisen luvun aritmeettinen pyöristys ei välttämättä noudata samoja pyöristyssääntöjä. Pyöristys riippuu siitä, käytetäänkö symmetristä vai asymmetristä pyöristystä. Symmetrisessä pyöristyksessä pyöristysalgoritmi käsittelee positiivisia ja negatiivisia lukuja samalla tavalla eli ottaa huomioon vain luvun itseisarvon. Asymmetrisessä pyöristyksessä algoritmi ottaa huomioon myös etumerkin. Esim. –1,5 pyöristyy lukuun –2 symmetrisellä pyöristyksellä ja lukuun –1 asymmetrisellä pyöristyksellä. Pyöristyssääntöjen mukaan luku pyöristyisi –2:een.

## Pyöristystapoja
Ennen varsinaisia pyöristystapoja käsitellään lukujen katkaisua. Katkaisu tarkoittaa sitä, että luku katkaistaan haluttuun tarkkuuteen, jolloin ylimääräiset numerot jätetään huomiotta, eikä aritmeettisia pyöristyssääntöjä käytetä. Esim. jos luku 32,438191288 halutaan ilmoittaa neljän desimaalin tarkkuudella, neljännen desimaalin jälkeen tulevat numerot tiputetaan pois, jolloin saadaan 32,4381. Kun taas halutaan esittää luvut 3,522 ja –3,522 kokonaislukutarkkuudessa, desimaaliosat tiputetaan pois: 3 ja –3. Käytännössä katkaisu vastaa luvun pyöristystä kohti nollaa.

Tyypillisiä pyöristystapauksia:

* Irrationaaliluku korvataan murtoluvulla, esim. π korvataan murtoluvulla 22/7.
* Murtoluku, joka on desimaalilukuna päättymätön jaksollinen desimaaliluku, korvataan päättyvällä desimaaliluvulla: esim. 5/3 ( = 1,666...) korvataan luvulla 1,6667.
* Rationaaliluku korvataan murtoluvulla, jossa on pienemmät luvut osoittajassa ja nimittäjässä: esim. 3122/9417 korvataan murtoluvulla 1/3.
* Lyhennetään desimaalilukua: esim. 2,1784 korvataan luvulla 2,18.
* Pyöristetään kokonaisluku pienempään tarkkuuteen: esim. 23&nbsp;217 korvataan luvulla 23&nbsp;200.
* Korvataan arvo luvulla, joka on jokin monikerta: esim. 27,2 sekuntia korvataan 30 sekunnilla (15 sekunnin monikerta).

### Pyöristys lisäysmonikertaan
Luvun x pyöristäminen lisäyksen m monikerraksi z tapahtuu yleisesti seuraavasti:
z = pyöristys(x / m) × m

Esim. pyöristetään x = 2,1784 € sentin tarkkuuteen eli 0,01:n monikerraksi:
y = x / m = 2,1784 / 0,01 = 217,84

Pyöristetään y kokonaisluvuksi:
z = q × m = 218 × 0,01 = 2,18

### Skaalauspyöristys
Laskutoimituksia pitäisi suorittaa mieluiten luvuilla, jotka ovat keskenään samaa suuruusluokkaa ja järkevän suuruisia verrattuna lukualueeseen ja liukulukujen tarkkuuteen. Skaalauspyöristyksessä lisäyksen m suuruus muuttuu riippuen tuloksen suuruudesta. Käytännössä tarkoitus on rajoittaa merkitsevien numeroiden määrää tuloksessa, jotta pysytään liukulukualueen tarkkuusrajoissa. Laskentaohjelmat tekevät skaalaukset sisäisesti, jolloin esim. fysikaalinen syöttödata voidaan antaa fysikaalisissa yksiköissä ja ohjelma palauttaa tulokset näissä yksiköissä.

* Luku 1,234 pyöristyy kolmen merkitsevän numeron tarkkuudella (suurin suhteellinen tarkkuus = 1/1000) luvuksi 1,23.
* Samalla skaalauksella luku 21,236 pyöristyy luvuksi 21,2 ja luku 321,236 luvuksi 321.
* Luku 3π / 7 ≈ 6,8571 × π × 2-4 pyöristyy skaalaustekijällä π binäärijärjestelmässä (kantaluku 2) ja kolmen merkitsevän numeron tarkkuudella (suurin suhteellinen tarkkuus = 1 / 23 = 1/8) sekä käytettäessä "pyöristys alaspäin" -pyöristystapaa luvuksi 6 × π × 2-4 = 3π / 8.
* Samanlainen skaalauspyöristys pyöristää sekä luvun π / 7 että π / 8 luvuksi π / 8.

### Kokonaislukupyöristys
Kokonaislukupyöristyksessä pyöristetään mielivaltainen luku y kokonaislukuun q. Tässä on useita tapoja:
* Pyöristys alaspäin (tai kohti lattiaa, kohti miinus ääretöntä): q on suurin kokonaisluku, joka ei ylitä y:n arvoa.
* Pyöristys ylöspäin (tai kohti kattoa, kohti plus ääretöntä): q on pienin kokonaisluku, joka ei ole arvoltaan pienempi kuin y.
* Pyöristys kohti nollaa (tai katkaisu, pyöristys äärettömästä poispäin): q on y:n kokonaislukuosa ilman desimaaliosaa.
* Pyöristys nollasta poispäin (tai kohti ääretöntä): jos y on kokonaisluku, q = y; muussa tapauksessa q on nollaa lähinnä oleva kokonaisluku niin että y on nollan ja q:n välissä.
* Pyöristys lähimpään kokonaislukuun: q on y:tä lähinnä oleva kokonaisluku (ks. tie-breaking-säännöt).

Neljää ensimmäistä menetelmää kutsutaan suunnatuksi pyöristämiseksi, koska niissä kaikissa pyöristetty arvo q on kohti tai poispäin samoja raja-arvoja (0, ±∞).

Jos y on positiivinen, alaspäin pyöristys on sama kuin pyöristys kohti nollaa ja ylöspäin pyöristys on sama kuin pyöristys poispäin nollasta. Jos y on negatiivinen, pyöristys alaspäin on sama kuin pyöristys nollasta poispäin ja pyöristys ylöspäin on sama kuin pyöristys kohti nollaa. Mikäli y on kokonaisluku, q = y. 

### Tie-breaking-säännöt
Kun luku y on täsmälleen kahden kokonaisluvun puolivälissä eli sen desimaaliosa on tasan 0,5, sen pyöristämisessä lähimpään kokonaislukuun on käytettävä ns. tie-breaking–sääntöjä.

Pyöristäminen ylöspäin: q = y + 0,5. Esim. arvo 23,5 pyöristyy arvoon 24 ja arvo –23,5 arvoon -23. Siis aina kohti ääretöntä. Menettely on asymmetrinen ja aiheuttaa positiivisen pyöristysvirheen. Tätä käytetään kuitenkin yleisesti monella tieteenalalla.

Pyöristäminen alaspäin: q = y – 0,5. Esim. 23,5 pyöristyy arvoon 23 ja −23,5 arvoon −24. Menettely on asymmetrinen ja aiheuttaa negatiivisen pyöristysvirheen.

Pyöristäminen nollasta poispäin: kun y on positiivinen, pyöristetään ylöspäin (q = y + 0,5), ja kun y on negatiivinen, pyöristetään alaspäin (q = y – 0,5). Esim. 23,5 pyöristyy lukuun 24 ja −23,5 lukuun −24. Menettely kohtelee positiivisia ja negatiivisia arvoja symmetrisesti eli ei aiheuta pyöristysvirhettä kumpaankaan suuntaan, jos pyöristettävät luvut ovat positiivisia ja negatiivisia samalla todennäköisyydellä. Menettelyä käytetään usein esim. valuuttamuunnoksissa ja hinnanpyöristyksissä.

Pyöristäminen nollaan päin: y on positiivinen, pyöristetään alaspäin (q = y − 0,5), ja kun y on negatiivinen, pyöristetään ylöspäin (q = y + 0,5). Esim. 23,5 pyöristyy lukuun 23 ja −23,5 lukuun −23.

Pyöristäminen lähimpään parilliseen kokonaislukuun: esim. 23,5 pyöristyy lukuun 24, 22,5 lukuun 22, −22,5 lukuun −22 ja −23,5 lukuun −24. Menetelmä on symmetrinen eli ottaa huomioon vain luvun itseisarvon. Menetelmä aiheuttaa kuitenkin positiivisen virheen parillisille luvuille ja negatiivisen virheen parittomille luvuille. Tästä huolimatta menetelmä on yleisesti käytössä kirjanpidossa, liukulukustandardissa IEEE-754 ja useissa ohjelmointikielissä, esim. Javassa. Sitä kutsutaan yleisesti nimillä pankkiirin, puolueeton, suppeneva, tilastotieteilijän, hollantilainen ja Gaussian-pyöristäminen.

Pyöristäminen lähimpään parittomaan kokonaislukuun: esim. 22,5 pyöristyy lukuun 23, 21,5 lukuun 21, −21,5 lukuun −21 ja −22,5 lukuun −23. Menetelmä ei ole yleisesti käytössä, paitsi tapauksissa, joissa halutaan välttää 0,5:n ja −0,5:n pyöristämistä nollaan.

Sattumanvaraisessa pyöristämisessä luku y, jonka desimaaliosa on tarkalleen 0,5, pyöristetään sattumanvaraisesti ylös- tai alaspäin: q = y + 0,5 tai q = y – 0,5 yhtä suurella todennäköisyydellä. Menetelmä ei aiheuta juurikaan virhettä positiivisille ja negatiivisille luvuille eikä parillisille ja parittomille luvuille. Menetelmä aiheuttaa kuitenkin sattumanvaraisuutta tulokseen, eli samasta datasta voidaan saada erilaiset tulokset kahdella eri laskukerralla.

Vuorottelevassa pyöristämisessä luku y, jonka desimaaliosa on tarkalleen 0,5, pyöristetään vuorotellen ylös- tai alaspäin: q = y + 0,5 tai q = y – 0,5. Menetelmä pienentää tuloksen sattumanvaraisuudesta johtuvaa osuutta mutta aiheuttaa silti negatiivisen tai positiivisen virheen mikäli desimaalilukuja, joiden desimaaliosa on tasan 0,5, on pariton määrä.

## Pyöristysvirhe
Pyöristysvirhe on ero luvun likiarvon ja tarkan matemaattisen arvon välillä. 
Numeerisessa laskennassa pyöristysvirheet johtuvat siitä, että liukulukujen esitykseen on varattu äärellinen määrä bittejä tietokoneen muistissa. Pyöristysvirhettä syntyy sekä lähtöarvoihin että laskennan aikana. Alkuarvoissa pyöristysvirhe voi johtua luvun irrationaalisuudesta (π, \sqrt 2) tai siitä, että sillä on päättymätön esitysmuoto binäärijärjestelmässä (0,110 = 0,00011001...2).

Virheen minimoimisessa on tärkeää, että lähtöarvoissa oleva virhe tai jossakin vaiheessa laskentaa syntyvä virhe ei kasva liian suureksi loppuarvoissa. Pyöristysvirheitä voidaan välttää minimoimalla aritmeettisten operaatioiden määrä esimerkiksi sieventämällä analyyttisiä kaavoja sekä pyöristämällä vain lopputulokset ja pitämällä laskentatarkkuus riittävän suurena. Pyöristysvirheet voivat kasautua esim. sarjojen summauksissa ja iteraatioissa. 

Laskettaessa yhteen hyvin erisuuruisia lukuja voi käydä niin, että pienemmän luvun suuruus on samaa luokkaa kuin suuremman luvun tarkkuus, joten sillä ei ole mitään vaikutusta lopputulokseen. Tällöin laskenta-algoritmia kannattaa muuttaa ja vaihtaa laskukaava numeerisesti erilaiseen muotoon.

Laskutoimitusten tuloksia on myös pyöristettävä. Likiarvolaskun tarkkuus voidaan osoittaa ilmoittamalla kuinka monella merkitsevällä numerolla tulos halutaan tai ilmoittamalla virheen yläraja tai desimaalien lukumäärä ja käytetty mittayksikkö (Mittayksikön tarkkuudella esim. 1,440&nbsp;kg on ilmoitettu gramman tarkkuudella ja 38&nbsp;345&nbsp;m2 on 4&nbsp;ha ilmoitettuna hehtaarin tarkkuudella.)

Lisäksi on huomioitava, että lukujen katkaisu voi aiheuttaa vielä suuremman virheen kuin pyöristäminen. Se voi olla kaksinkertainen lukujen pyöristyksestä aiheutuvaan virheen maksimiin.

## Lähteet
* Numeerisen laskennan alkeita
* How To Implement Custom Rounding Procedures – Article 196652, Microsoft Support (2004)
* Lähteenmäki, Ilkka & Minni, Erkki. 1976. Mittaustulosten käsittelystä ja työturvallisuudesta fysiikan harjoitustöissä. Toinen painos, 1977. Turun yliopisto
* Numeerinen matematiikka MAA12 

### Viitteet