Numeerinen analyysi 2016

Samankaltaiset tiedostot
Numeeriset menetelmät

Liukulukulaskenta. Pekka Hotokka

Numeeriset menetelmät TIEA381. Luento 2. Kirsi Valjus. Jyväskylän yliopisto. Luento 2 () Numeeriset menetelmät / 39

Numeeriset menetelmät

BM20A1501 Numeeriset menetelmät 1 - AIMO

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33

Numeeriset menetelmät

811120P Diskreetit rakenteet

Numeeriset menetelmät TIEA381. Luento 11. Kirsi Valjus. Jyväskylän yliopisto. Luento 11 () Numeeriset menetelmät / 37

Numeeriset menetelmät

Numeeriset menetelmät TIEA381. Luento 6. Kirsi Valjus. Jyväskylän yliopisto. Luento 6 () Numeeriset menetelmät / 33

Kevät Kirsi Valjus. Jyväskylän yliopisto Tietotekniikan laitos

MS-C1340 Lineaarialgebra ja

LIITE 1 VIRHEEN ARVIOINNISTA

Numeeriset menetelmät

LIITE 1 VIRHEEN ARVIOINNISTA

Numeeriset Menetelmät

Numeerinen analyysi Harjoitus 1 / Kevät 2017

Numeeriset menetelmät

(0 desimaalia, 2 merkitsevää numeroa).

Numeerinen integrointi ja derivointi

Numeeriset menetelmät TIEA381. Luento 4. Kirsi Valjus. Jyväskylän yliopisto. Luento 4 () Numeeriset menetelmät / 44

Numeeriset menetelmät TIEA381. Luento 7. Kirsi Valjus. Jyväskylän yliopisto. Luento 7 () Numeeriset menetelmät / 43

LIITE 1 VIRHEEN ARVIOINNISTA

k=0 saanto jokaisen kolmannen asteen polynomin. Tukipisteet on talloin valittu

x j x k Tällöin L j (x k ) = 0, kun k j, ja L j (x j ) = 1. Alkuperäiselle interpolaatio-ongelmalle saadaan nyt ratkaisu

Differentiaali- ja integraalilaskenta 1 Ratkaisut 5. viikolle /

Numeeriset menetelmät

Numeerinen integrointi

Analyysi III. Jari Taskinen. 28. syyskuuta Luku 1

Matematiikan tukikurssi

IV. TASAINEN SUPPENEMINEN. f(x) = lim. jokaista ε > 0 ja x A kohti n ε,x N s.e. n n

3 = Lisäksi z(4, 9) = = 21, joten kysytty lineaarinen approksimaatio on. L(x,y) =

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt

Funktioiden approksimointi ja interpolointi

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

13. Taylorin polynomi; funktioiden approksimoinnista. Muodosta viidennen asteen Taylorin polynomi kehityskeskuksena origo funktiolle

Numeeriset menetelmät

Juuri 12 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty

jakokulmassa x 4 x 8 x 3x

MS-C1340 Lineaarialgebra ja

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Luento 5: Suurten lineaaristen yhtälöryhmien ratkaiseminen iteratiivisilla menetelmillä

Tenttiin valmentavia harjoituksia

MS-A0104 Differentiaali- ja integraalilaskenta 1 (ELEC2) MS-A0106 Differentiaali- ja integraalilaskenta 1 (ENG2)

Epälineaaristen yhtälöiden ratkaisumenetelmät

Lukujonon raja-arvo 1/7 Sisältö ESITIEDOT: lukujonot

Numeeriset menetelmät

Harjoituskokeiden ratkaisut Painoon mennyt versio.

4 Matemaattinen induktio

Numeeriset menetelmät TIEA381. Luento 5. Kirsi Valjus. Jyväskylän yliopisto. Luento 5 () Numeeriset menetelmät / 28

Funktion raja-arvo. lukumäärien tutkiminen. tutkiminen

Injektio (1/3) Funktio f on injektio, joss. f (x 1 ) = f (x 2 ) x 1 = x 2 x 1, x 2 D(f )

BM20A0900, Matematiikka KoTiB3

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Matematiikan peruskurssi 2

Numeeriset menetelmät TIEA381. Luento 8. Kirsi Valjus. Jyväskylän yliopisto. Luento 8 () Numeeriset menetelmät / 35

Numeeriset menetelmät

Luento 2: Liikkeen kuvausta

1 Rajoittamaton optimointi

Ei välttämättä, se voi olla esimerkiksi Reuleaux n kolmio:

(iv) Ratkaisu 1. Sovelletaan Eukleideen algoritmia osoittajaan ja nimittäjään. (i) 7 = , 7 6 = = =

2.2 Neliöjuuri ja sitä koskevat laskusäännöt

Osa IX. Z muunnos. Johdanto Diskreetit funktiot

r > y x z x = z y + y x z y + y x = r y x + y x = r

1 Peruslaskuvalmiudet

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

2v 1 = v 2, 2v 1 + 3v 2 = 4v 2.. Vastaavasti ominaisarvoa λ 2 = 4 vastaavat ominaisvektorit toteuttavat. v 2 =

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään

Matematiikan tukikurssi, kurssikerta 3

Differentiaaliyhtälöryhmä

Reaaliluvut. tapauksessa metrisen avaruuden täydellisyyden kohdalla. 1 fi.wikipedia.org/wiki/reaaliluku 1 / 13

8 Potenssisarjoista. 8.1 Määritelmä. Olkoot a 0, a 1, a 2,... reaalisia vakioita ja c R. Määritelmä 8.1. Muotoa

infoa Viikon aiheet Potenssisarja a n = c n (x x 0 ) n < 1

Matematiikan tukikurssi

Iteratiiviset ratkaisumenetelmät

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

Luku 4. Derivoituvien funktioiden ominaisuuksia.

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

Numeeriset menetelmät TIEA381. Luento 14. Kirsi Valjus. Jyväskylän yliopisto. Luento 14 () Numeeriset menetelmät / 55

1 Määrittelyjä ja aputuloksia

Reaalilukuvälit, leikkaus ja unioni (1/2)

Matematiikan tukikurssi

6*. MURTOFUNKTION INTEGROINTI

Matemaattinen Analyysi

Schildtin lukio

Oppimistavoitematriisi

MATEMATIIKAN KOE, PITKÄ OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ

Derivaattaluvut ja Dini derivaatat

6. Differentiaaliyhtälösysteemien laadullista teoriaa.

MS-A0207 Differentiaali- ja integraalilaskenta 2 (Chem) Yhteenveto, osa I

reaalifunktioiden ominaisuutta, joiden perusteleminen on muita perustuloksia hankalampaa. Kalvoja täydentää erillinen moniste,

1 sup- ja inf-esimerkkejä

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista

Matriisilaskenta (TFM) MS-A0001 Hakula/Vuojamo Ratkaisut, Viikko 47, 2017

Tehtävänanto oli ratkaista seuraavat määrätyt integraalit: b) 0 e x + 1

Numeeriset menetelmät TIEA381. Luento 3. Kirsi Valjus. Jyväskylän yliopisto. Luento 3 () Numeeriset menetelmät / 45

Alkulukujen harmoninen sarja

Vastaus: 10. Kertausharjoituksia. 1. Lukujonot lim = lim n + = = n n. Vastaus: suppenee raja-arvona Vastaus:

Transkriptio:

Numeerinen analyysi 2016

Sisältö 1 Johdanto 8 2 Numeerinen tehtävä 9 2.1 Numeerinen algoritmi............................ 9 2.2 Esimerkki.................................. 10 2.3 Numeerisen laskennan virheet....................... 11 2.3.1 Mallivirheet............................. 11 2.3.2 Menetelmävirheet.......................... 12 2.3.3 Lähtöarvovirheet.......................... 12 2.3.4 Pyöristysvirheet........................... 13 2.3.5 Virheen eteneminen peruslaskutoimituksessa........... 13 3 Tietokonearitmetiikka ja pyöristysvirhe 15 3.1 Liukulukuesitys............................... 15 3.2 Tietokonearitmetiikka........................... 18 3.3 Liukuluvun pyöristysvirhe......................... 20 3.4 Liukulukulaskennan virheanalyysi..................... 21 3.4.1 Virheen kasaantuminen peräkkäisissä likulukulaskutoimituksissa 22 3.5 Liukuluvun merkitsevien numeroiden häviäminen............ 23 3.6 Tarkkuuden häviämisen lause....................... 24 3.7 Tarkkuuden menettämisen välttäminen.................. 25 3.7.1 Pseudokoodi............................. 26 3.8 Periodisuudesta johtuva tarkkuuden häviäminen............. 27 3.9 Iteratiivisen algoritmin stabiilisuudesta.................. 27 3.9.1 Konvergenssin tehokkuus...................... 29 3.10 Matemaattisen tehtävän stabiilisuudesta................. 30 4 Epälineaarisen yhtälön ratkaisu 35 4.1 Johdanto................................... 35 1

4.1.1 Iteratiivisten algoritmien konvergenssianalyysistä........ 36 4.2 Regula Falsi-menetelmä.......................... 37 4.2.1 Pseudokoodi............................. 38 4.3 Puolitusmenetelmä............................. 38 4.3.1 Algoritmin toiminta........................ 38 4.3.2 Pseudokoodi............................. 39 4.3.3 Konvergenssi analyysi....................... 40 4.4 Newtonin menetelmä............................ 42 4.4.1 Newtonin menetelmän johtaminen................. 42 4.4.2 Pseudokoodi............................. 43 4.4.3 Menetelmän havainnollistaminen................. 44 4.4.4 Konvergenssi analyysi....................... 45 4.5 Algoritmien lopetustesteistä epälineaarisen yhtälön ratkaisussa..... 50 4.6 Epälineaarisen yhtälöryhmän ratkaisu................... 51 4.7 Kiintopistemenetelmä............................ 52 4.8 Sekanttimenetelmä............................. 55 4.8.1 Algoritmi.............................. 56 4.8.2 Konvergenssi analyysi....................... 57 4.9 Polynomin juuren laskeminen....................... 59 4.9.1 Hornerin algoritmi......................... 60 5 Lineaarisen yhtälöryhmän ratkaiseminen 66 5.1 Yleistä lineaarisista yhtälöryhmistä.................... 66 5.2 Gaussin eliminointimenetelmä....................... 67 5.2.1 Algoritmi.............................. 68 5.2.2 Pseudokoodi............................. 69 5.2.3 Häiriöalttius............................. 71 5.2.4 Ratkaisun iteratiivinen tarkentaminen.............. 74 5.2.5 Paranneltu Gaussin menetelmä.................. 74 2

5.2.6 Esimerkki osittaistuennan käytöstä................ 75 5.2.7 Pseudokoodi............................. 76 5.3 Tridiagonaaliset ja nauhamatriisit..................... 78 5.3.1 Tridiagonaalinen yhtälöryhmä................... 79 5.3.2 Diagonaalisesti dominoiva matriisi................. 81 5.4 Matriisin hajotelmat............................ 81 5.4.1 LU-hajotelma............................ 82 5.4.2 Pseudokoodi............................. 83 5.4.3 Lineaarisen yhtälöryhmän ratkaiseminen LU-hajotelmalla.... 85 5.4.4 LDL T -hajotelma.......................... 85 5.4.5 Choleskyn hajotelma........................ 87 5.4.6 Suorat menetelmät harvoille matriiseille............. 88 5.5 Yhtälöryhmän ratkaiseminen iteratiivisilla menetelmillä......... 91 5.5.1 Perusmenetelmät.......................... 91 5.5.2 Jacobin menetelmä......................... 94 5.5.3 Gauss-Seidel iteraatio........................ 96 5.5.4 SOR menetelmä........................... 98 5.6 Jyrkimmän laskun menetelmä ja liittogradienttimenetelmä....... 99 5.6.1 Jyrkimmän laskun menetelmä................... 101 5.6.2 Liittogradienttimenetelmä..................... 101 5.6.3 Pohjustettu liittogradienttimenetelmä.............. 104 6 Interpolointi 107 6.1 johdanto................................... 107 6.2 Polynominen interpolointi......................... 107 6.2.1 Interpolaatiopolynomin Lagrangen muoto............ 107 6.2.2 Newtonin muoto interpolaatiopolynomille............. 109 6.2.3 Tekijöiden a i laskeminen...................... 111 6.2.4 Pseudokoodi............................. 115 3

6.2.5 Etenevät differenssit........................ 116 6.3 Polynomisen interpoloinnin virhe..................... 118 6.4 Spline-interpolointi............................. 122 6.4.1 Ensimmäisen asteen spline..................... 123 6.4.2 1. asteen splinen virhearvio.................... 124 6.4.3 Toisen asteen spline......................... 125 6.4.4 Algoritmi: kvadraattinen spline.................. 126 6.5 Luonnolliset kuutiosplinet......................... 127 6.5.1 Johdanto.............................. 127 6.5.2 Luonnollinen kuutiospline..................... 127 6.5.3 Luonnollisen kuutiosplinen käyttö interpolointitehtävässä.... 128 6.5.4 Pseudokoodi............................. 130 6.5.5 Sileysominaisuus.......................... 132 6.6 B-splinit................................... 133 6.6.1 Johdanto ja määritelmä...................... 133 6.6.2 Interpolointi B-splineillä...................... 137 7 Numeerinen derivointi ja integrointi 141 7.1 Derivaattojen estimointi.......................... 141 7.1.1 Derivaatan differenssiapproksimaatiot............... 141 7.1.2 Richardsonin ekstrapolaatio.................... 143 7.1.3 Algoritmi.............................. 145 7.1.4 Derivaatta interpolaatiopolynomin avulla............. 146 7.1.5 Toisen kertaluvun derivaatan differenssiapproksimaatio..... 147 7.2 Numeerinen integrointi........................... 147 7.2.1 Newton-Cotes kaavat........................ 149 7.2.2 Palottainen puolisuunnikasmenetelmä............... 154 7.2.3 Rekursiivinen puolisuunnikassääntö................ 157 7.2.4 Rombergin menetelmä....................... 158 4

7.3 Adaptiiviset integrointialgoritmit..................... 160 7.3.1 Adaptiivinen osavälijako...................... 161 7.3.2 Adaptiivinen Simpsonin menetelmä................ 161 7.3.3 Gaussin integrointimenetelmät................... 163 7.3.4 Epäoleelliset integraalit....................... 166 7.3.5 Integroimisvälin katkaiseminen................... 166 7.3.6 Singulariteetin eliminoiminen................... 167 7.3.7 Muuttujanvaihto.......................... 167 7.3.8 Gaussin kaavat epäoleellisille integraaleille............ 167 7.4 Moniulotteinen integrointi ja Monte Carlo-menetelmä.......... 168 7.4.1 Yksinkertaisia kaavoja kolmiolle.................. 169 7.4.2 Tulointegraalit........................... 169 7.4.3 Monte Carlo-menetelmä...................... 170 8 Differentiaaliyhtälöiden ratkaisemisesta 173 8.1 Johdanto................................... 173 8.2 Ratkaisun olemassaolo ja yksikäsitteisyys................. 176 8.3 Taylorin kehitelmiin perustuvat menetelmät............... 177 8.3.1 Eulerin menetelmä......................... 177 8.3.2 Eulerin menetelmän virhe..................... 178 8.3.3 Korkeamman kertaluvun Taylorin menetelmät.......... 179 8.4 Runge-Kuttan menetelmät......................... 180 8.4.1 Kertaluvun 2 menetelmä...................... 180 8.4.2 Kertaluvun 4 menetelmä...................... 181 8.5 Askelpituuden säätämisestä........................ 182 8.5.1 Virhekontrolloitu Runge-Kutta askel............... 183 8.6 Moniaskelmenetelmät............................ 184 8.7 Diffrentiaaliyhtälön ja ratkaisumenetelmän stabiilisuus......... 185 8.7.1 Differentiaaliyhtälön stabiilisuudesta............... 185 5

8.7.2 Ratkaisumenetelmien stabiilisuudesta............... 187 8.7.3 Eulerin menetelmän stabiilisuusväli................ 189 8.7.4 Implisiittisen Eulerin menetelmän stabiilisuusväli........ 189 8.7.5 Crank-Nicolsonin menetelmän stabiilisuusväli.......... 190 8.7.6 Heun menetelmän stabiilisuusväli................. 190 8.8 Differentiaaliyhtälöryhmien ratkaisemisesta................ 190 8.8.1 Kankea DY-ryhmä......................... 191 6

Viitteet [1] J. Douglas Faires, Richards Burden: Numerical Methods, Thomson, USA, 2003-622 pp. [2] Haataja Juha et.al.: Numeeriset menetelmät käytännössä, CSC Tieteellinen laskenta Oy, 2002. 2. painos. 415 pp. http://www.csc.fi/csc/julkaisut/oppaat/index_html [3] Ward Cheney, David Kincaid Numerical Mathematics and Computing, Thomson, USA, 2004-817 pp. [4] Atkinson K.An introduction to numerical analysis, Wiley, 1978 [5] Mäkelä M., Nevanlinna O., Virkkunen J.: Numeerinen matematiikka, Gaudeamus, Mänttä 1992-331 pp [6] Conte & C. de Boor Elementary numerical analysis: an algorithmic approach, McGraw-Hill, 1980 [7] David Kincaid, Ward Cheny Numerical Analysis: Mathematics of Scientific Computing, Thomson, USA, 2002-788 pp. [8] Practical Numerical Methods: Algorithms and Programs, McGraw-Hill Publ., 1987-259 pp. [9] Numerical Mathematics, Springer, 1991-654 pp 7

1 Johdanto Kurssin tavoitteena on auttaa lukijaa ymmärtämään kuinka tietokoneella voidaan ratkaista tyypillisiä matemaattisia ongelmia, mitkä ovat lähtöisin tekniikan, luonnontieteen, taloustieteen jne. tutkimusalueilta. Kurssi ei käsittele tutkimuskohteen matemaattista mallintamista, vaan se käsittelee ns. "matemaattisen mallin"muotoon saatetun tutkimusongelman ratkaisemista. Tunnettujen numeeristen menetelmien sumeilematon käyttö, tuntematta niiden rajoituksia, on ongelmaa ratkaistaessa tyhmänrohkeaa, koska numeeriset laskentatulokset sisältävät lähes poikkeuksetta eri lähteistä aiheutuvia virheitä. Näiden virheiden aiheuttajan, suuruuden, etenemisen ja kasvunopeuden tunteminen on lopputuloksen kannalta oleellisen tärkeää. Numeerinen tulos on aina arvokkaampi mikäli se sisältää myös estimaatin siihen sisältyvästä mahdollisesta virheestä. Nykyisin tietokonelaitteistojen ja ohjelmistojen kehitys on mahdollistanut tavalliselle kadunmiehellekin ratkaista numeerisesti matemaattisia ongelmia joiden ratkaisemisesta eivät tiedemiehetkään aiemmin edes uneksineet. Tästä huolimatta on hyvä säilyttää tietty skeptisyys tuloksia kohtaan ja muistaa numeerisen analyytikon Carl-Erik Fröberg:n varoitus: Never in the history of mankind has it bee possible to produce so many wrong answers so quickly! Kurssi tavoitteena onkin auttaa lukijaa ymmärtämään numeeriseen laskentaan sisältyvät sudenkuopat antamalla hänelle työkaluja oikean menetelmän valintaan, virheen havaitsemiseen, virheen arviointiin ja virheen kontrollointiin. Kurssin nimenä on numeerisen analyysin peruskurssi. Vaihtoehtoisia nimiä voisivat olla numeeristen menetelmien peruskurssi, numeerisen matematiikan peruskurssi tai numeriikan peruskurssi. Lukijalta edellytetään esitietoina tavanomaisen matemaattisen analyysin ja matriisilaskennan (lineaarialgebra) perusteiden tuntemusta. Numeerista matematiikkaa voisi luonnehtia, että se on matematiikan osa-alue, joka tutkii numeeristen ongelmien formulointitapoja, numeeristen algoritmien kehittämistä, ominaisuuksia ja niiden soveltuvuutta erilaisiin tehtäviin. Kyseessä on siis matemaattisten probleemoiden likimääräinen ratkaiseminen konstruktiivisesti äärellisellä määrällä aritmeettisia alkeisoperaatioita. Ratkaisualgoritmeille on yleensä olennaista laskutoimitusten suuri lukumäärä ja niiden peräkkäinen toisto. Pyrkimyksenä on mahdollisimman suuri automaattisuus ja yleispätevyys siten, että algoritmi on pätevä mahdollisimman suurelle lähtövektoreiden joukolle ja tuottaa tunnetuissa virherajoissa likimääräisesti oikean ratkaisun. Algoritmin tulee myös olla luotettava ja mahdollisimman taloudellinen (työmäärän, tilan, ajan jne. suhteen). Matemaattisia malleja käytetään nykyisin lähes kaikilla tieteenaloilla kun halutaan tietää miten jokin systeemi toimii. Kuva 1 kertoo matemaattisen mallin ratkaisun eri vaiheet. Tyypillisesti mallintamisprosessi alkaa mallinnettavan systeemin formuloinnista matemaattisiksi yhtälöiksi (matemaattinen probleema). Matemaattisen mallin avulla pystymme kuvaamaan systeemin oleelliset piirteet ja voimme ennustaa systeemin käyttäytymistä. Matemaatista mallia ei kuitenkankaan usein voida ratkaista suljetussa muodossa, vaan joudumme käyttämään approksimaatioita ja likimääräisiä ratkaisuja. Mallin approksimointiin käytämme numeerisia menetelmiä, joiden avulla muodostamme alkuperäisestä mallista ns. numeerisen mallin (numeerinen probleema), minkä 8

R E AAL ISY STE E MI Tutkimuskohde MATE MAATTINE N MAL L I Matemaattiset yhtälöt NUME E R INE N MAL L I Matemaattisen mallin likiarvo K OK E ITA, HAV AINTOJA MATE MAATTINE N R ATK AISU NUME E R INE N R ATK AISU likiarvo NUME E R INE N AL GOR ITMI TUL K INTA R AT K AISU NUME E R INE N TUL OS likiarvo TIE TOK ONE - OHJE L MA Kuva 1: Mallin ratkaisun vaiheet ratkaisemiseen voimme edelleen käyttää numeerisia laskualgoritmeja. Molemmissa vaiheissa joudumme tekemään likiarvoistuksia, mitkä vääristävät lopputulosta. Kuitenkin pyrimme tekemään likiarvoistukset siten, että tiedämme niiden vaikutuksen lopputulokseen. Ts. pyrimme arvioimaan ratkaisun tarkkuutta ja luotettavuutta. Yleensä reaalimaailman ilmiöt ovat niin monimutkaisia, että laskuja ei voi suorittaa kynällä ja paperilla vaan tarvitaan tietokoneita. Tällöin joudumme koodaamaan numeerisen algoritmin tietokoneelle, jolloin ongelman ratkaisu voi edelleen muuttua tietokoneen lakentatarkkuuden tai jopa ohjelmointivirheiden vuoksi. Siksi numeerisia ratkaisumenetelmiä käytettäessä tulisi valistuneella käyttäjällä olla käsitys menetelmän matemaattisista perusteista, tietoisuus siitä, että millaisia tehtäviä menetelmällä voidaan ratkaista halutulla tarkkuudella ja kyky arvioida saatujen tulosten järkevyys. 2 Numeerinen tehtävä 2.1 Numeerinen algoritmi Numeerisen ongelman ratkaisu ilmaistaan yleensä numeerisena algoritmina. Usein ongelma on ratkaistavissa monella eri algoritmilla. Numeerinen algoritmi voidaan määritellä seuraavasti. 9

Määritelmä 2.1. Numeerinen algoritmi on joukko yksikäsitteisiä sääntöjä, jotka ilmaisevat annettuihin lähtöarvoihin a = (a 1,...,a n ) T ja niistä saatuihin välituloksiin kohdistuvien aritmeettisten (yhteen-, vähennys-, kerto- ja jakolasku) ja vertailuoperaatioiden järjestyksen ja laadun. Yleensä numeerisen algoritmin toteuttaminen tarkasti on mahdotonta, sillä algoritmi voi sisältää äärettömän määrän operaatioita (sarjakehitelmät) tai laskuissa esiintyvät luvut tarvitsevat äärettömän pitkän tilan tarkkaa esitysmuotoa varten (π, e, 2). Vaikka luvut voitaisiinkin esittää tarkasti, niin lukuesityksen numeroiden määrä voi kasvaa epäkäytännöllisen suureksi (esim. kertolaskussa numeroiden määrä kaksinkertaistuu). Koska numeerinen ongelma ratkaistaan yleensä tietokoneella, niin käytännössä "tarkka"numeerinen algoritmi korvataankin yleensä toteuttamiskelpoisella äärellisellä numeerisella algoritmilla. Sen ominaisuuksia ovat: Kaikki äärettömän monta askelta sisältävät toimitukset keskeytetään, kun riittävä tarkkuus on saavutettu. Kaikki laskuissa käytettävät luvut pyöristetään likiarvoiksi jos lukuesitysten numeroiden määrä kasvaa liian suureksi. Äärellisen numeerisen algoritmin antama tulos on näin ollen aina oikean tuloksen likiarvo. Jatkossa tarkoitamme numeerisella algoritmilla äärellistä algoritmia. Tämän vuoksi myös saman tehtävän erilaiset numeeriset algoritmit voivat antaa hyvin erilaisia tuloksia. 2.2 Esimerkki Tarkastellaan liikkuvaa kappaletta, jonka ajassa t liikkuman matkan haluamme saada selville, kun tunnemme kappaleen sijainnin s 0 ajanhetkellä t 0 ja nopeuden v(t) joka hetkenä t > t 0. Havaintotilanne voisi kuvata esim. nesteen virtausta putkistossa. Pelkistämme tilanteen kuvauksen matemaattiseksi malliksi { s(t 0 ) = s 0, s (t) = v(t) t t 0. (2.1) missä s (t) = ds dt. Matemaattinen malli on kappaleen paikkaa s kuvaava differentiaaliyhtälö, jolla on alkuehtona s(t 0 ) = s 0. Mallin ratkaisu voidaan lausua muodossa s(t) = s 0 + 10 t 0 v(t)dt. (2.2)

Jos v on jokin helposti integroitavissa oleva funktio, niin saadaan s k = s(t k ) määrättyä kaavasta (2.2). Yleensä ei käytännössä näin onnellisesti ole vaan v on monimutkainen funktio tai jopa tunnettu vain pistejoukkona v i = v(t i ), t i = t 0 +ih, i = 1,...,n. Usein v riippuu myös paikasta, ts. v(s(t),t). Käytännön tavoitteeksi voimme asettaa kappaleen paikan s = s(t), t > 0 määräämisen sijasta, määrittää kappaleen paikka ajanhetkillä t i, kunhan aika-askel h on riittävän pieni ja n riittävän iso. Päädymme korvaamaan mallin (2.1) sen likimääräisellä analogialla. Asettamalla mallissa (2.1) ds = s i+1 s i, dt = h ja v(t i ) = v i, saamme n yhtälöä s i+1 = s i +hv i i = 1,...,n 1. (2.3) Näin olemme konstruoineet numeerisen mallin (2.3), minkä ratkaisujono s 1,...,s n on helposti muodostettavissa, koska s 0 on tunnettu. Ratkaisualgoritmin lähtöarvot muodostavat vektorin a = (t 0,s 0,h,n,v 0,...,v n ) T, missä arvot v i = v(s i,t i ) on mahdollisesti laskettava erikseen (jos ei tunneta). Mallin (2.3) ratkaiseva algoritmi voidaan kirjoittaa muotoon 1. t t 0, i 0 (lue: aseta t:lle arvo t 0 ja i:lle arvo 0) 2. Jos i = n, niin lopeta. Muuten jatka seuraavasta kohdasta. 3. v v i 4. s i+1 s i +hv i 5. t t+h, i i+1, siirry vaiheeseen 2. Teoreettisesti voidaan osoittaa, että melko yleisin olettamuksin s(t i ) s i 0, kunhan h 0 siten, että nh =vakio. Valitsemalla h pieneksi, jolloin n tulee suureksi saadaana mielivaltaisen tarkkoja approksimaatioita s i tarkkoille arvoille s(t i ) (edellyttäen, että v i -avot ovat tarkkoja). Tehtävän voi ratkaista tehokkaammin (vähemmällä laskennalla) muilla fiksummilla algoritmeilla. 2.3 Numeerisen laskennan virheet Muodostettaessa numeerista mallia ja sen ratkaisualgoritmia joudutaan useassa vaiheessa tietoisesti korvaamaan erilaisia struktuureja toisilla ja tekemään likimääräistyksiä. Tällöin syntyy erilaisia virheitä, joiden suuruutta pyritään kontrolloimaan. Korvikestruktuuri pyritään aina valitsemaan siten, että se vastaisi ominaisuuksiltaan (jatkuvuus, derivoituvuus,...) mahdollisimman hyvin alkuperäistä rakennetta. 2.3.1 Mallivirheet Reaaliongelman formulointi matemaattiseksi tehtäväksi onnistuu yleensä vain tekemällä yksinkertaistuksia ja olettamuksia tutkittavasta ongelmasta. Yleensä vähämerkityksellisiä tekijöitä (esim. ilmanvastus putoamisliikkeessä,...) jätetään huomiotta tai 11

muuttujien väliset riippuvuussuhteet oletetaan lineaarisiksi. Yksinkertaistukset ja olettamukset aiheuttavat ns. mallivirheen, mikä tulee ottaa huomioon lähinnä mallin hyvyyttä tarkasteltaessa. Mallivirheiden käsittely ei kuulu numeerisen matematiikan piiriin, mutta niiden olemassaolo on hyvä muistaa haettaessa selitystä mitattujen ja laskettujen tulosten välille. 2.3.2 Menetelmävirheet Menetelmävirheeksi kutsutaan virhettä, mikä syntyy kun matemaattinen ongelma korvataan numeerisella ongelmalla tai numeerinen ongelma palautetaan äärelliseksi. Menetelmävirhe tehdään yleensä tietoisesti ja sitä pyritään kontrolloimaan, jotta tunnettaisiin numeerisen ratkaisun poikkeama alkuperäisen matemaattisen tehtävän ratkaisusta. Usein menetelmävirheen kohdalla puhutaan katkaisuvirheestä, mikäli se muodostuu esim. äärettömän sarjan katkaisemisesta. Esimerkiksi jos sarja katkaistaan n:ään termiin, sarjaksi y(x) = e x = 1+x+ x2 2! + x3 xn +...+ 3! n! +R n+1(x) (2.4) ỹ(x) = e x = 1+x+ x2 2! + x3 xn +...+ 3! n!, (2.5) niin menetelmävirhe on y(x) ỹ(x) = R n+1 (x). Kun n on riittävän iso, niin ỹ(x) on hyvä approksimaatio y(x):lle ja usein käytetään merkintää ỹ(x) y(x). Menetelmävirhettä voidaan kutsua diskretisointivirheeksi kun jatkuva suure, kuten esim. derivaatta y (x), korvataan diskreetillä analogiallaan millä on ominaisuus ỹ (x) = y(x+h) y(x), (2.6) h y(x+h) y(x) lim h 0 h = y (x). (2.7) 2.3.3 Lähtöarvovirheet Lähtöarvoissa olevaa virhettä sanotaan lähtöarvovirheeksi ja sen seurauksena lopputulos vääristyy. Numeerinen ongelma tai algoritmi saattavat lisäksi olla herkkiä lähtöarvovirheelle, minkä seurauksena sinänsä nerkityksetön häiriö lähtötiedoissa voi vahvistua lopputuloksen täysin vääristäväksi tekijäksi. Tämän vuoksi on hyödyllistä tuntea lopputuloksen riippuvuus lähtöarvoista erikseen numeerisen tehtävän ja jopa vastaavan matemaattisen tehtävän osalta. 12

2.3.4 Pyöristysvirheet Tietokoneiden aritmetiikka on normaalista reaalilukujen aritmetiikasta poikkeavaa pseudoaritmetiikkaa. Siinä jokainen reaaliluku on pystyttävä esittämään kiinteällä määrällä bittejä, minkä vuoksi lukuja joudutaan mahdollisesti pyöristämään. Näin syntyy pyöristysvirhettä sekä lähtöarvoihin että välituloksiin (esim. 0.1 = 0.0001100110011... lukujärjestelmässä, minkä kantaluku on kaksi). Pyöristysvirheiden vaikutuksen analysointi on hankalaa ja niinpä se jätetään usein kokonaan tekemättä tai turvaudutaan kokeellisiin tuloksiin tai epätäydellisiin tarkasteluihin. 2.3.5 Virheen eteneminen peruslaskutoimituksessa Tietokonealgoritmin antama tuos on yleensä tarkan tuloksen approksimaatio (likiarvo) johtuen analyyttisten operaatioiden korvaamisesta peruslaskutoimituksilla (±,, /) ja lukujen pyöristämisestä laskennan kuluessa. Merkitään jatkossa x = (x 1,...,x n ) T on tarkka tulos ja x = ( x 1,..., x n ) T on likiarvo. Määritellään absoluuttinen ja suhteellinen virhe Määritelmä 2.2. Absoluuttisella virheellä tarkoitetaan lukua ε := x x, suhteellisella eli relatiivisella virheellä tarkoitetaan lukua ρ := x x x ja prosentuaalisella virheellä tarkoitetaan lukua p := 100 x x x. Yllä on x:n sopiva normi. Tavallisia ovat x = max x i, x 1 = 1 i n n x 2 = x 2 i. Kun n=1, x = x. i=1 n x i tai i=1 Huomautus 2.1. Suhteellinen virhe on ε. Yleensä ei tunneta tarkkaa arvoaxja sen x sijaan käytetään likiarvoa x. Yleensä x >> ε, joten sen korvaaminen x:lla ei aiheuta suurta virhettä, sillä ε x ε = ε x x ε x x x x x x x ε2 x x 0 13

Huomautus 2.2. Likiarvon tarkkuutta mitattaessa absoluuttisen virheen käyttäminen voi johtaa harhaan. Suhteellinen virhe on parempi koska se huomioi lukujen suuruuden. Esimerkiksi a. Jos x = 0.3000 10 1 ja x = 0.3100 10 1, niin absoluuttinen virhe ε = 0.1 ja suhteellinen virhe ρ = 0.3333... 10 1. b. Josx = 0.3000 10 3 ja x = 0.3100 10 3, niin absoluuttinen virheε = 0.1 10 4 ja suhteellinen virhe ρ = 0.3333... 10 1. c. Jos x = 0.3000 10 4 ja x = 0.3100 10 4, niin absoluuttinen virhe ε = 0.1 10 3 ja suhteellinen virhe ρ = 0.3333... 10 1. Määritelmä 2.3. Luvun x oikeiden desimaalien määrä on d, jos x x 1 2 10 d ja x approksimoi x:ää s:llä merkitsevällä numerolla, jos x x x 1 2 10 s. Esimerkki 2.1. Luvut 78.123 ja 78.157 ovat samoja kolmen merkitsevän numeron ja yhden desimaalin tarkkuudella. Tutkitaan seuraavaksi virheiden etenemistä peruslaskutoimituksissa (±,, /). Merkitään absoluuttisia virheitä ε x := x x ja ε y := y ỹ. Eri laskutoimituksille saadaan Yhteenlasku: ε x+y = (x+y) ( x+ỹ) = (x x)+(y ỹ) x x + y ỹ = ε x +ε y. Kertolasku: ε x y = (x y) ( x ỹ) = ( x±ε x )(ỹ ±ε y ) xỹ) = xỹ ± xε y ±ỹε x ±ε x ε y xỹ x ε y + ỹ ε x +ε x ε y. Olettamalla, että x >> ε x ja ỹ >> ε y, niin viimeinen termi voidaan jättää pois ja saadaan ε x y = x ε y + ỹ ε x. Jakolasku: εx y x ε y + ỹ ε x yỹ x ε y + ỹ ε x ỹ 2 14

Vastaavasti voidaan johtaa lausekkeet myös laskutoimitusten suhteellisille virheille. Yhteenlasku: Kertolasku: Jakolasku: ρ x+y = ε x+y x+ỹ = ε x +ε y x+ỹ. ρ x y = ε x y x ỹ x ε y + ỹ ε x x ỹ = ε x y y x/ỹ ε x x + ε y ỹ ρx = ε x x + ε y ỹ Esimerkki 2.2. Tarkastellaan melkein yhtäsuurien lukujen x = 1730 ja y = 1721 vähennyslaskua. Olkoon x = 1731.73 ja ỹ = 1719.2791 mittausten antamat likiarvot. Nyt ρ x = 1730 1731.73 = 0.001 ja ρ y = 1721 1719.2791 0.001. 1730 1721 Ts. lähtötieto on annettu 0.1% tarkuudella. Erotuksen suhteellinen virhe ts. yli 38%. ρ x y = (x y) ( x ỹ) x y = 9 12.4509 9 = 0.3834, Siis, jos summan itseisarvo on pieni yhteenlaskettavien itseisarvoihin verrattuna, voi suhteellinen virhe kasvaa suureksi. 3 Tietokonearitmetiikka ja pyöristysvirhe Tietokoneen suorittama laskenta eroaa normaalista, algebrallisesta laskennasta. Olemme tottuneet mm. että 1+1=2 ja ( 2) 2 = 2. Tietokonearitmetiikassakin saamme 1+1=2, mutta ( 2) 2 ei ole tarkalleen 2. Matematiikassa olemme tottuneet että luvuissa on käytössä ääretön määrä desimaaleja ja määrittelemme luvun 2 lukuna, mikä kerrottuna itsellään antaa luvun 2. Sama ei päde tietokonearitmetiikan suhteen, vaan siinä jokainen luku esitetään kiintellä, äärellisellä määrällä numeroita (bittejä). Tämän vuoksi tietokkoneessa voidaan esittää tarkasti lähinnä ainoastaan rationaaliluvut - eikä edes niitäkään kaikkia. Muut luvut ovat likiarvoja. 3.1 Liukulukuesitys Kymmenkantaisessa lukujärjestelmässä ei-negatiivinen reaaliluku desimaalimuodossaan sisältää kokonaisosan, desimaaliosan ja desimaalipisteen niiden välillä - esimerkiksi 37.21829 tai 0.002271828. Toinen standardi, jota usein kutsutaan normalisoiduksi 15

tieteelliseksi muodoksi saadaan siirtämällä desimaalipistettä ja kertomalla luku sopivalla 10:n potensilla. Edellä esitetyt luvut saadaan muotoon 0.3721829 10 2 ja 0.2271828 10 2. Tietotekniikassa normalisoitua tieteellistä muotoa kutsutaan myös normalisoiduksi liukulukuesitykseksi. Mikä tahaansa desimaaliluku x 0 voidaan esittää normalisoidussa muodossa x = ±0.d 1 d 2... 10 n, missä d 1 0 ja n Z. Luvut d 1,d 2,... ovat desimaaliyksiköitä 0,1,2,3,4,5,6,7,8 ja 9. Normalisoitu liukuluku voidaan siis kirjoittaa muodossa x = ±r 10 n ( 1 10 r < 1). Esitys koostuu kolmesta osasta: etumerkistä, normalisoidusta mantissasta r, ja exponentista n. Vastaavasti, tietokoneessa käytettävässä 2-kantaisessa liukulukujärjestelmässä reaaliluku x 0 esitetään muodossa x = ±q 2 m ( 1 2 q < 1), missä mantissa q voidaan esittää muodossa q = 0.b 1 b 2 b 3..., missä b 1 0 ja b i {0,1},i = 1,3,... Vaikkakin liukulukuesitykset näyttävät hyvin samanlaisilta on tietokoneen liukulukujärjestelmällä yksi oleellinen ero: Tietokoneella on äärellinen kapasiteetti ja äärellinen sanan pituus mihin luvut talletetaan, joten tietokoneella esitettävien lukujen suuruus ja tarkkuus ovat rajoitettuja. Äärellisen sanapituuden vuoksi useampia reaalilukuja ei voida esittää tietokoneella tarkasti. Hyvä esimerkki tästä on luku 1 10 = (0.1) 10 = (0.0 6314 6314 6314...) 8 = (0.0 0011 0011 0011...) 2. Tietokoneella esitettävä lukujoukko ei siis ole jatkuva vaan pikemminkin diskreetti joukko. Esimerkki 3.1. Tarkastellaan kaikkien liukulukujen joukkoa, mitkä voidaan esittää muodossa x = ±(0.b 1 b 2 b 3 ) 2 2 ±k (k,b i {0,1}) Yllä olevalla muodolla voidaan esittää korkeintaan 2 2 2 2 3 = 48 lukua, sillä ±:lla on 2 vaihtoehtoa, b 1 :lla on 2 vaihtoehtoa, b 2 :lla on 2 vaihtoehtoa, b 3 :lla on 2 vaihtoehtoa ja exponentilla on 3 vaihtoehtoa. Kun listataan kaikki positiiviset luvut, niin nähdään että niistäkin on osa samoja. Kaikkiaan järjestelmässä on 31 eri lukua. 16

0.000 2 0 = 0 0.000 2 1 = 0 0.000 2 1 = 0 0.001 2 0 = 1 0.001 2 1 = 1 0.001 2 1 = 1 8 4 16 0.010 2 0 = 2 8 0.011 2 0 = 3 8 0.100 2 0 = 4 8 0.101 2 0 = 5 8 0.110 2 0 = 6 8 0.111 2 0 = 7 8 0.010 2 1 = 2 4 0.011 2 1 = 3 4 0.100 2 1 = 4 4 0.101 2 1 = 5 4 0.110 2 1 = 6 4 0.111 2 1 = 7 4 0.010 2 1 = 2 16 0.011 2 1 = 3 16 0.100 2 1 = 4 16 0.101 2 1 = 5 16 0.110 2 1 = 6 16 0.110 2 1 = 7 16 1 16 3 16 5 16 7 16 1 8 1 4 3 1 5 3 7 8 2 8 4 8 0 1 5 4 3 2 7 4 Kuva 2: Positiiviset koneluvut Tietokoneessa mielivaltainen reaaliluku esitetään muodossa ±q 2 m. Mikäli m on koneelle sallitujen rajojen ulkopuolella sanotaan, että tapahtuu ylivoto tai alivuoto tai, että x on tietokoneen (luku)rajojen ulkopuolella. Yleensä ylivuoto aiheuttaa ohjelman normaalin toiminnan päättymisen ja tulokseksi saadaan erityinen liukuluku ±Inf. Alivuoto puolestaan käsitellään yleensä siten, että luku pyöristyy nollaksi. Edellisen esimerkin tapauksessa reaaliluvut väliltä ( 1, 1 ) aiheuttavat alivuodon ja luvut 16 16 R\[ 7, 7 ] aiheuttavat ylivuodon. lisäksi, jos edellisessä esimerkissä sallittaisiin ainoastaan normalisoidut liukuluvut x = ±(0.1b 2 b 3 ) 2 2 ±k, niin pienin positiivinen luku olisi 4 4 (0.100) 2 2 1 = 1 ja nollan ympäristöön tulee suhteellisen suuri reikä. 4 5 16 7 16 1 4 3 1 5 3 7 8 2 8 4 8 0 1 5 4 3 2 7 4 Kuva 3: Normalisoidut koneluvut 17

3.2 Tietokonearitmetiikka Nykyisin tietokoneet käyttävät yleisesti 32-bittistä sanan pituutta. Numeroiden esittäminen näissä ns. Marc-32 tietokoneissa on määritelty IEEE-standardin mukaisena liukulukuna. Yksinkertaisen tarkuuden liukuluvulla tarkoitetaan normalisoitua liukulukua ±q 2 m, mikä on talletettu 32-bittiseen sanaan. Muistutetaan vielä, että tällöin kaikkia lukuja ei voida esittää tarkasti koska nillä voi olla ääretön desimaaliesitys tai binääriesitys (esim. kaikki irrationaaliluvut ja osa rationaaliluvuista), esim. π, e, 1 3,0.1 jne. Kuva 4 esittää 32-bittistä IEEE-standardin mukaista liukulukua. Yksi bitti on varattu etumerkille, kahdeksan bittiä eksponentille ja 23 bittiä mantissalle. Vasemmanpuoleinen bitti on varattu mantissan etumerkille, s = 0 vastaa etumerkkiä + ja s = 1 vastaa etumerkkiä -. Mantissa f on aina normalisoitu, jolloin ensimmäinen bitti on aina 1, joten sitä ei talleta mantisalle varattuun tilaan. Näin mantisalla on todellisuudessa 24- bittinen resoluutio. 23-bittinen mantissa f esittää ns. 1-plus muodon (1.f) 2 = (1+f) 2 murto-osaa. Eksponentti esitetään 8-bittisenä, mistä vähennetään 127 (excess-127 code). etumerkki s eksponentti c normalisoitu mantissa (1.f) 2 9 bittiä desimaalipiste 23 bittiä Kuva 4: Yksinkertaisen tarkkuuden liukuluku 32-bittisessä sanassa Marc-32 koneluku voidaan nyt esittää yksinkertaisen tarkuuden IEEE standardin liukulukuna: ( 1) s 2 c 127 (1.f) 2, missä 0 < c < (11111111) 2 = 255. Arvot 0 ja 255 esittävät erikoistapauksia ±0 ja ±. Siten todellinen eksponentti on rajoitettu välille 126 c 127 127. Samoin mantissa on rajoitettu välille 1 (1.f) 2 (1.11111111111111111111111) 2 = 2 2 23. Suurin esitettävissä oleva Marc-32 luku on siis (2 2 23 )2 127 2 128 3.4 10 38. Koneepsiloniksi kutsutaan liukulukua ε = 2 23. Se on pienin positiivinen luku ε siten, että 1+ε 1. Koska 2 23 1.2 10 7, niin yksinkertaisen tarkkuuden laskenta suoritetaan suunnilleen kuuden desimaalin tarkkuudella. Esimerkki 3.2. Tarkastellaan lausekkeen c = a 2 +b 2 laskemista kun a = 10 30 ja b = 1. Koska lukua a 2 = 10 60 ei voida esittää yksinkertaisella tarkkuudella aiheutuu ylivuoto kesken laskutoimituksen. Ongelma voidaan kiertää 18

järjestämällä laskutoimitukset toisin c = σ ( a σ )2 +( b σ )2, missä σ = max{ a, b } = 10 30. Mikäli Marc-32 laskennassa tarvitaan suurempaa tarkuutta, niin käytetään ns. kaksoistarkuuden liukulukuja, missä liukuluvut talletetaan kahden sanan mittaiseen muistialueeseen. Kaksinkertaisen tarkkuuden liukuluvulle on varattu 52 bittiä mantissalle. tällöin kone-epsilon on luokkaa 2 52 2.2 10 16 ja laskentatarkkuus on 15 desimaalin luokkaa. Eksponentille on varattu 11 bittiä, mitä on keskitetty luvulla 1023. Eksponentin vaihteluväli on siten [-1022, 1023]. Suurin esitettävissä oleva koneluku on (2 2 52 )2 1023 1.8 10 308 ja pienin positiivinen koneluku on 2 1022 2.2 10 308. Kokonaisluvuilla 31 bittiä on varattu itse luvulle ja yksi bitti etumerkille. Siten pienin kokonaisluku on (2 31 1) ja suurin (2 31 1) = 2147483647. Siten, käytettäessä kokonaislukuaritmetiikkaa on laskentatarkkuus noin 9 numeroa. Esimerkki 3.3. Tietokonearitmetiikka on aiheuttanut useita katastrofeja esim. avaruusja sotateollisuudessa. Helmikuun 25. 1991 Persianlahden öljysodan aikana amerikkalainen torjuntaohjus epäonnistui torjumaan Iraqin ohjuksen Saudi-Arabiassa ja 28 amerikkalaista sotilasta kuoli. Syynä oli ajan epätarkka laskenta tietokoneen pyöristysvirheen vuoksi. Tietokoneen kello mittasi aikaa sekunnin kymmenesosissa ja ne konvertoitiin sekunneiksi kertomalla niiden lukumäärä 1 10 :lla 24-bittisessä rekisterissä. Koska 1 10 on päättymätön binääriluku se katkaistiin 24:ään bittiin. Näin syntynyt pieni katkaisuvirhe kertautui suureksi kun sitä kerrottiin koneen mittaamien sekunnin kymmenysten suurella määrällä. Torjuntapatteri oli ollut toiminnassa noin 100 tuntia ennen katastrofia, joten virhettä oli ehtinyt kertyä noin 0,34 sec. 24-bittisessä rekisterissä ja katkaisuvirhe on 1 10 = (0.00011001100110011001100) 2 (0.0000000000000000000000011001100...) 2 0.000000095. Kertomalla virhe 100 tunnissa olevilla sekunnin kymmenyksillä saadaan 0.000000095 100 60 60 10 = 0.34. Ohjuksen lentonopeus on noin 1676 m/sec, joten se ehti kulkea yli puoli kilometriä vireajassa, mikä riitti siihen, että torjuntaohjus ei sitä saavuttanut. Esimerkki 3.4. Ehkäpä tietokonehistorian kallein ohjelmointivirhe tapahtui kesäkuun 4. päivänä 1996, kun Euroopan avaruuskeskuksen Ariane 5 raketti räjähti 40 sekunttia laukaisun jälkeen. Raketti oli ensimmäisellä matkallaan yli vuosikymmenen kestäneen ja 7 miljardia euroa maksaneen kehitystyön jälkeen. Raketin ja sen lastin arvo olivat 19

noin 500 miljoonaa euroa. Virhe aiheutui raketin ohjausjärjestelmään kun 64-bittinen horisontaalista nopeutta merkitsevä liukuluku konvertoitiin 16 bittiseksi kokonaisluvuksi. Konvertoitava luku oli suurempi kuin 32768, mikä on suurin mahdollinen 16 bittinen etumerkillinen kokonaisluku. Konversio epäonnistui ja raketin ohjausjärjestelmä petti. 3.3 Liukuluvun pyöristysvirhe Tarkastellaan, mitä tapahtuu reaaliluvun x tarkuudelle kun se talletetaan 32-bittiseen sanaan. Luku x voi olla koneen lukualueen ulkopuolella, jolloin tapahtuu yli- tai alivuoto. Tällöin suhteellinen virhe on hyvin suuri. Tarkastellaan kuitenkin normalisoitua liukulukumuodossa olevaa reaalilukua x, mikä on koneen lukualueella, ts. x = q 2 m ( 1 2 q < 1, 126 m 127) Prosessia, missä x korvataan lähimmällä koneluvulla kutsutaan pyöristämiseksi ja syntyvää virhettä pyöristysvirheeksi. Haluamme tietää pyöristysvirheen suuruuden. Oletetaan, että mantissalla q on normalisoitu binäärimuoto x = (0.1b 2 b 3...b 24 b 25 b 26...) 2 2 m. Yksi x:ää lähellä olevista koneluvuista, x, (x:n vas. puolella oleva) saadaan pyöristämällä alaspäin tai yksinkertaisesti vain tiputtamalla ylimääräiset bitit b 25 b 26... pois, koska ainoastaan 23 bittiä on varattu mantissalle, ts. x = (0.1b 2 b 3...b 24 ) 2 2 m. Toinen x:ää lähellä olevista koneluvuista, x +, (x:n oik. puolella oleva) saadaan pyöristämällä ylöspäin, ts. lisäämällä yksi yksikkö b 24 :ään x :sen esityksessä. Ts. x + = [ (0.1b 2 b 3...b 24 ) 2 +2 24] 2 m. Lähin näistä koneluvuista valitaan esittämään x:ää. x x - + - x x x x+ Kuva 5: Lukujen x, x, x + mahdollinen sijainti. Jos x on lähempänä x :sta kuin x + :aa, niin absoluuttinen virhe Suhteelliselle virheelle saadaan x x x x x 1 2 x + x = 2 25+m. 2 25+m (0.1b 2 b 3 b 4...) 2 2 2 25 m 1 2 = 2 24 = u, missä u = 2 24 on 32-bittisen IEEE standardin mukainen liukulukulaskennan pyöristysvirhe. Vastaavasti voidaan osoittaa, jos x on lähempänä x + :aa kuin x :sta, että suhteellinen virhe ei ole suurempi kuin 2 24. 20

Huomautus 3.1. Koska kone-epsilon ε = 2 23, niin u = 1 2 ε. Edelleen u = 2 p, missä p on mantissan pituus bitteinä (mukaanlukien piilotettu bitti). Jos käytetään katkaisua (chopping), niin kaikki ylimääräiset bitit pudotetaan pois ja tällöin katkaisuvirhe on 2u = 2 23 = ε. Huomautus 3.2. Pyöristettäessä siis yli p-bittistä mantissaa f p-bittiseksi mantissaksi f r, pätee: { 2 p 2 p f + 1, s > 0, 2 f r = 2 p 2 p f 1, s < 0. 2 missä tarkoittaa katkaisua alaspäin lähimmäksi kokonaisluvuksi ja tarkoittaa katkaisua ylöspäin lähimmäksi kokonaisluvuksi. 3.4 Liukulukulaskennan virheanalyysi Tarkastellaan peruslaskutoimituksissa {+,,, } tapahtuvia virheitä. Periaatteen ymmärtämiseksi tarkastellaan aluksi kahden kymmenkantaisen luvun yhteenlaskua joilla on 5-numeroiset mantissat. Olkoon x = 0.37218 10 4 ja y = 0.71422 10 1. Yleensä tietokoe suorittaa aritmeettiset operaation kaksinkertaisessa työaluueessa (5 desimaalia -> 10 desimaalia jne.). Luvut summataan yhteenlaskimessa ja tulos pyöristetään 5-desimaaliseksi: x =0.3721800000 10 4 y =0.0000071422 10 4 x+y =0.3721871422 10 4 Lähin koneluku on z = 0.37219 10 4 ja yhteenlaskun suhteellinen virhe on x+y z x+y = 0.0000028578 104 0.3721871422 10 4 0.77 10 5. Virhettä voidaan pitää hyväksyttävänä näin alhaisen laskentatarkkuuden laskimessa. Merkitään jatkossa reaalilukua x vataavaa liukulukua f l(x), missä funktio f l riippuu tietenkin valitusta tietokoneesta. Edellisen esimerkin tapauksessa 5-desimaalinen laskin antaisi fl(0.3721871422 10 4 ) = 0.37219 10 4. Marc-32 tietokoneelle osoitettiin aiemmin, että kaikille koneen lukualueeseen kuuluville x pätee: x fl(x) x u (u = 2 24 ) (3.1) Epäyhtälö (3.1) voidaan kirjoittaa käytännöllisempään muotoon: fl(x) = x(1+δ) ( δ 2 24 ). 21

Huomautus. Epäyhtälöt ovat yhtäpitäviä, sillä olkoon δ = (f l(x) x)/x. Yhtälön (3.1) nojalla saadaan δ 2 24 ja ratkaisemalla fl(x) saadaan fl(x) = x(1+δ). Merkitään symbolilla x y mitä tahansa pruslaskutoimitusta +,, tai. Oletetaan, että tietokone on suunniteltu siten, että kun operoidaan keskenään kaksi konelukua x ja y, niin tietokone tuottaa luvun f l(x y) luvun x y sijaan. Voidaan ajatella, että x y on ensin muodostettu "oikein", sitten normalisoitu ja lopuksi pyöristetty koneluvuksi. Edellisen analyysin nojalla minkään peruslaskutoimituksen suhteellinen virhe Marc-32 koneessa ei ylitä arvoa 2 24, sillä: fl(x y) = (x y)(1+δ) ( δ 2 24 ). Esimerkki 3.5. Olkoon x, y ja z Marc-32 konelukuja. Mikä on suhteellisen pyöristysvirheen yläraja laskutoimitukselle z(x+y)? Ratkaisu. Laskutoimitus x+y tehdään ensin ja se antaa tuloksena koneluvun f l(x+y), mikä eroaa x+y:stä pyöristysvirheen vuoksi. Ylläolevan analyysin nojalla on δ 1 siten, että ( fl(x+y) = (x+y)(1+δ 1 ) δ1 2 24). Seuraavaksi kerrotaan koneluvulla z koneluku fl(x+y) ja tulos on koneluku fl[zfl(x+y)]. Myös tämä eroaa lähtöarvostaan siten, että jollekin δ 2 : ( fl[zfl(x+y)] = zfl(x+y)(1+δ 2 ) δ2 2 24) Yhdistämällä molemmat yhtälöt saadaan: fl[zfl(x+y)] =z(x+y)(1+δ 1 )(1+δ 2 ) =z(x+y)(1+δ 1 +δ 2 +δ 1 δ 2 ) z(x+y)(1+δ 1 +δ 2 ) ( =z(x+y)(1+δ) ) δ 2 23 Yllä δ 1 δ 2 2 48 0 ja δ 1 +δ 2 δ 1 + δ 2 2 24 +2 24 = 2 23. 3.4.1 Virheen kasaantuminen peräkkäisissä likulukulaskutoimituksissa Tarakastellaan summan i=1 n x i laskemisessa muodostuvaa virhettä 32-bittisessä koneessa. Oletetaan, että summa lasketaan lisäämällä peräkkäisiä termejä summaan. Määritellään s 1 = x 1 s r = fl(s r 1 )+fl(x r ) = (s r 1 +x r )(1+δ r ), r = 2,,n ja δ r 2 24. 22

Nyt Siten ja s n = fl(x 1 )+fl(x 2 )+ +fl(x n ) = (s n 1 +x n )(1+δ n ) = [(s n 2 +x n 1 )(1+δ n 1 )+x n ](1+δ n ) = x 1 (1+η 1 )+x 2 (1+η 2 )+ +x n (1+η n ) = x i + x i η i, missä 1+η r = (1+δ r )(1+δ r+1 ) (1+δ n ), r = 2, n ja η 1 = η 2. (1 2 24 ) n r+1 (1+η r ) (1+2 24 ) n r+1, r = 2, n ( n s n = fl(x 1 )+fl(x 2 )+ +fl(x n ) = x i )(1+ i=1 n i=1 x ) iη i n i=1 x i (3.2) Yllä summan s n suhteellinen virhe δ sn = n i=1 x iη i n i=1 x. i Suhteelisen virheen lausekkeesta voidaan havaita, että jos summa on pieni yhteenlaskettaviin x i verrattuna, saatta suhteellinen virhe kasvaa suureksi. Lisäksi lukujen η i ylärajat kaavassa (3.2) pienenevät i:n kasvaessa, eli luvut kannattaa laskea yhteen kasvavassa järjestyksessä alkaen pienimmästä. Karkeana sääntönä on, että suoritettaessa N kappaletta aritmeettisia operaatioita on kononaisvirhe kertaluokkaa 2 24 N, jos pyöristysvirheet tapahtuvat satunnaisesti alas- ja ylöspäin. 3.5 Liukuluvun merkitsevien numeroiden häviäminen Olkoon x reaaliluku, minkä normalisoitu liukulukuesitys on x = ±r 10 n ( 1 10 r < 1) Esimerkiksi, kun x = 0.3721498 10 5, niin sanotaan että 3 on eniten merkitsevä numero ja 8 on vähiten merkitsevä numero. Merkitsevien numeroiden määrä voi vähentyä radikaalisti vähennettäessä toisistaan lähes saman suuruisia lukuja. Tästä aiheutuvan tarkuuden huononemista voidaan kuitenkin ehkäistä erilaisilla tekniikoilla, kuten osoittajan rationalisoinnilla, Taylorin sarjoilla, trigonometrisillä kaavoilla, logaritmien avulla, tuplatarkuudella tai alueen reduktiolla. Tietystikään ei voida etukäteen tietää missä kohden tarkuus pienenee pitkien laskutoimitusten aikana, mutta voimme yrittää ehkäistä tarkuuden häviämistä laskennan aikana olemalla varuillaan. Tarkastellaan kahta esimerkkiä tarkkuuden häviämisestä. 23

Esimerkki 3.6. Jos x = 0.3721448693 ja y = 0.3720214371, niin mikä on laskutoimituksen x y suhteellinen virhe kun laskennassa käytetään 5 desimaalin tarkkuutta? Pyöristetään luvut aluksi 5-desimaalisiksi: x = 0.37214 ja ỹ = 0.37202. Saadaan x ỹ = 0.00012, kun taas tarkka erotus on x y = 0.0001234322. Suhteellinen virhe on (x y) ( x ỹ) x y = 0.0000034322 0.0001234322 3 10 2 Tuloksen suhteellinen virhe on aika iso verattuna lähtötiedon suhteelliseen virheeseen, mikä on pienempi kuin 1 2 10 4. Esimerkki 3.7. Tarkastellaan suuren ja pienen luvun yhteenlaskua laskemalla 10- järjestelmän luvut 7000 ja 0.01 yhteen laskimessa, mikä käyttää 4-numeroista mantissaa. Lukujen normalisoidut 4-numeroiset liukulukuesitykset ovat: 0.01 =0.1000 10 1 7000 =0.7000 10 4 Suoritettaessa yhteenlaskua luovutaan normalisoidusta esitysmuodosta pienemmän luvun kohdalla 0.000001 10 4 0.700000 10 4 0.700001 10 4 Vaikka varsinainen laskutoimitus suoritetaankin muistitilaa pidemmässä yksikössä, suoritetaan katkaisu tulosta talletettaessa ja pienemmän yhteenlaskettavan merkitys häviää ja tulokseksi saadaan 0.7000 10 4. Huomautus 3.3. Esimerkissä 3.6 lasketussa erotuksessa x ỹ = 0.00012 oli vain 2 merkitsevää numeroa, kun voitaisiin otettaa, että tietokone laskisi 5:n merkitsevän numeron tarkkuudella. Eräs keino tarkkuuden parantamiseksi olisi ensin ennustaa, että tarkuus voi hävitä ja sitten pyrkiä korjaamaan koodia. Yksinkertaisimmin tarkkuuden häviäminen voitaisiin eliminoida käyttämällä esim. tuplatarkkuuden laskentaa välituloksille x, y ja x y. Haittapuolena on, että etukäteen on vaikea ennustaa missä tuplatarkkuuden laskentaa tarvitaan tai merkitsevien numeroiden väheneminen voi olla jopa niin radikaalia, ettei edes tuplatarkkuuden laskennasta ole apua. 3.6 Tarkkuuden häviämisen lause Ennen kuin käsitellään muita tekniikoita joilla tarkkuuden häviämistä voidaan estää, tarkastellaan seuraavaa kysymystä. Kuinka monta merkitsevää bittiä menetetään vähennyslakussa, kun x on lähellä y:tä? Lukujenxjay etäisyyttä mitataan luvulla 1 y x. Lause 3.1. Olkoon x ja y normalisoituja liukulukuja siten, että x > y > 0. Jos 2 p 1 y x 2 q joillekin positiivisille kokonaisluvuille p ja q, niin korkeintaan p ja vähintään q merkityksellistä bittiä menetetään vähennyslaskussa x y. 24

Todistus. Todistetaan oikeanpuoleinen epäyhtälö. Olkoon x = r 2 n ja y = s 2 m, missä 1 r,s < 1 normalisoituja liukulukuja. Koska y < x, niin tietokone siirtää 2 y:n mantissaa n m paikkaa oikealle ennen vähennyslaskua. Vähennyslaskussa y:llä ja x:llä täytyy olla sama eksponetti, ts. y = s2 m n 2 n ja Erotuksen mantisalle pätee: x y = (r s2 m n ) 2 n r s2 m n = r ( 1 s2m ) ( y) = r 1 < 2 q. r2 n x Kun siis tulos x y normalisoidaan, niin mantissan bittejä täytyy siirtää vähintään q bittiä vasemmalle. Samalla q kappaletta merkitsemättömiä nollia lisätään mantissan loppuun. Tämä tarkoittaa, että q bittiä tarkkuudesta on hukattu. (vasen epäyhtälö harjoituksena) Esimerkki 3.8. Kuinka monta merkitsevää bittiä häviää vähennyslaskussa 37.593621-37.584216? Ratkaisu. Olkoon x ensimmäin ja y toinen numeroista. Silloin 1 y x = 0.0002501754 on lukujen2 12 = 0.000244 ja2 11 = 0.000488 välissä. Tämä tarkoittaa, että vähintään 11 mutta ei enempää kuin 12 bittiä tarkkuutta häviää. 3.7 Tarkkuuden menettämisen välttäminen Esimerkki 3.9. Tarkastellaan funktiota f(x) = x 2 +1 1 minkä arvo pitää laskea kun x on lähellä nollaa. Koska x 2 +1 1 kun x 0, laskennassa häviää luultavimmin merkitseviä bittejä. Ongelma voidaan kiertää kirjoittamalla funktio muotoon f(x) = ( x 2 +1 1 )( x 2 +1+1 ) = x2 +1+1 x 2 x2 +1+1. Esimerkiksi, 32-bittisessä tietokoneessa arvolla x = 10 4 saadaan alkuperäisestä muodosta virheellisesti f(x) = 0 mutta 1 2 10 8 korjatusta muodosta. 25

Esimerkki 3.10. Halutaan laskea funktion f(x) = x sin(x) (3.3) arvoja lähellä nollaa. Laskemalla suoraan kaavasta (3.3) menetetään tarkuutta radikaalisti koska sinx x kun x 0. Eräs keino kiertää ongelmaa on hyödyntää sinx:n Taylor sarjaa sinx = x x3 3! + x5 5! x7 7! + Nollan ympäristössä sarja suppenee hyvin nopeasti. Saadaan f(x) = x (x + ) x3 3! + x5 5! x7 = x3 7! 3! x5 5! + x7 + (3.4) 7! Analysoidaan vielä hieman väliä, milloin tulisi käyttää kaavaa (3.4) ja milloin kaavaa (3.3). Lauseen 3.1 mukaan voidaan tarkkuuden menettäminen rajata yhteen bittiin, kun rajoitetaan x siten, että 1 sinx 1. Laskimella voidaan helposti todeta, että x > 1.9. 2 x Tällöin voidaan käyttää kaavaa (3.4) kun x < 1.9 ja kaavaa (3.3) kun x 1.9. Funktiota f(x) laskettaessa voidaan sarjan termit laskea induktiivisesti algoritmilla t 1 t n+1 = = x3 6 t n x 2 (2n+2)(2n+3) (n 1) Osittaissummat saadaan vastaavasti: { s 1 = t 1 s n+1 = s n +t n+1 (n 1) (3.5) siten, että s n = n t k = n ( 1) k+1[ x 2k+1 /(2k +1)! ]. k=1 k=1 3.7.1 Pseudokoodi real function f(x) integer parameter n 10 integer i real s,t,x if x 1.9 then s x sinx else t x 3 /6 s t for i=2 to n do 26

t tx 2 /[(2i+2)(2i+3)] s s+t end for end if f s end function f 3.8 Periodisuudesta johtuva tarkkuuden häviäminen Tarkkuus voi pienentyä radikaalisti myös laskettaessa tietokoneella kirjastofunktioiden arvoja hyvin suurilla argumentin arvoilla. Esimerkiksi sini funktioille pätee periodisuus: sinx = sin(x+2nπ) kaikille x R ja kaikille n Z. Tämän vuoksi sinin arvot tarvitsee tuntea vain argumenteille x [0, 2π]. Tätä ominaisuutta hyödynnetään tietokoneella laskettaessa ja sitä kutsutaan välin redusoinniksi. Oletetaan, että pitäisi laskea sin(12532.14). Vähentämällä argumentista 2π:n kerrannaisia saadaan: sin(12532.14) = sin(3.47) jos pidetään kahden desimaalin tarkkuus. Ts., vaikka alkuperäisessä argumentissa oli 7 numeron tarkkuus on redusoidussa argumentissa vain 3 numeron tarkkuus. Muut numerot häviävät vähennettäessä alkuperäisestä argumentista 3988π. Laskettaessa arvoa sin(12532.14) ei siis saada kuin 3 numeron tarkkuus. Tätä epätoivottua merkitsevien bittien häviämistä voidaan yrittää ehkäistä lisäämällä laskentatarkkuutta. Esimerkki 3.11. Kuinka monta merkitsevää bittiä menetetään laskettaessa sin x:n arvoa, kun argumentti redusoidaan välille [0,2π]? Ratkaisu. Olkoon annettu x > 2π. Määrätään n siten, että 0 x 2nπ < 2π. Tällöin sin x = sin(x 2nπ). Vähennyslaskussa x 2nπ menetetään merkitseviä bittejä. Lauseen 3.1 nojalla vähintään q bittiä menetetään, jos 1 2nπ x 2 q. Koska 1 2nπ x = x 2nπ < 2π x x, niin voimme päätellä, että vähintään q merkitsevää bittiä hukataan jos 2 q x 2π. 3.9 Iteratiivisen algoritmin stabiilisuudesta Matemaattisen probleeman Φ(x,f) = 0 27

ratkaisulle x lasketaan usein likiarvo alkuperäistä tehtävää approksimoivan tehtävän, Φ n (x n,f) = 0 avulla. Tällöin täytyy laskettua likiarvoa x n parantaa kunnes approksimointivirhe on vaadituissa rajoissa. Yleinen parannustekniikka on lisätä korjaus nykyiseen likiarvoon ja verratta uuden likiarvon approksimointivirhettä vaadittuun toleranssiin. Jos aproksimointivirhe ylittää toleranssin, niin korjausaskelia jatketaan. Prosessi tuottaa n:n iteraation jälkeen jonon likimääräisiä ratkaisuita x 1, x 2,,x n. Jos x n x, niin sanotaan, että algoritmi konvergoi kohti ratkaisua x. Kun approksimointivirhe on halutuissa rajoissa iteraatio n lopetetaan. Valitettavasti ei ole aina takuita siitä, että iteratiivinen algoritmi konvergoisi. Sen vuoksi vaaditaan approksimoivalta probleemalta Φ n tiettyjä ominaisuuksia. Edellä todettiin, että peräkkäisissä aritmeettisissa operaatioissa pyöristysvirhe kasvaa lineaarisesti suhteessa operaatioiden lukumäärän neliöjuureen. Kun pyöristysvirheen kasvu on lähes lineaarista ja hidasta (ts. algoritmin herkkyys on pieni) sanotaan, että approksimoiva funktio on hyvin käyttäytyvä, well-conditioned. Joissain tapauksissa pyöristysvirhe voi kasvaa kuten a n, missä a on vakio ja n laskuoperaatioiden lukumäärä. Proseduuria, mikä muodostaa tällaisen eksponentiaalisen pyöristusvirheen kasvun sanotaan (numeerisesti) epästabiiliksi. On selvää, että vain stabiileilla algoritmeilla on merkitystä numeerisesa laskennassa. Esimerkki 3.12. Karkeasti voidaan sanoa, että numeerinen prosessi on epästabiili, jos siinä jossain vaiheessa tehdyt pienet virheet kasvattavat prosessin kokonaisvirhettä siten, että se pilaa tarkuuden ja lopputuloksen. Tarkastellaan esimerkkinä reaalilukujen jonoa, mikä on määritelty induktiivisesti seuraavasti: { x 0 = 1, x 1 = 1 3 x n+1 = 13x 3 n 4x (3.6) 3 n 1 (n 1) Helposti nähdään, että iteraatio generoi jonon x n = ( 1 3 )n. (3.7) Yhtälö (3.7) on selvästi tosi arvoille n = 0 ja n = 1. Jos se on voimassa arvoille n m, niin se on voimassa myös arvolle n = m+1, sillä x m+1 = 13 3 x m 4 3 x m 1 = 13 3 (1 3 )m 4 3 (1 3 )m 1 = ( 1 3 )m 1 [ 13 9 4 3 ] = (1 3 )m+1 Kun generoidaan induktiivisesta kaavasta (3.6) jono lukuja Marc-32 tietokoneessa, niin 28

osa termeistä ovat täysin vääriä: x 0 = 1.0000000 x 1 = 0.3333333 (7 merkitsevää oikeaa desimaalia) x 2 = 0.1111112 (6 merkitsevää oikeaa desimaalia) x 3 = 0.0370373 (5 merkitsevää oikeaa desimaalia) x 4 = 0.0123466 (4 merkitsevää oikeaa desimaalia) x 5 = 0.0041187 (3 merkitsevää oikeaa desimaalia) x 6 = 0.0013857 (2 merkitsevää oikeaa desimaalia) x 7 = 0.0005131 (1 merkitsevää oikeaa desimaalia) x 8 = 0.0003757 (0 merkitsevää oikeaa desimaalia). x 14 = 0.9143735 x 15 = 3.657493 (suhteellinen virhe 10 8 ) Algoritmi (3.6) on siis selvästikin epästabiili. Jokainen x n virhe kertautuu luvulla 13/3 laskettaessa arvoa x n+1. Siis, jos absoluuttinen virhe termissä x 1 on luokkaa 10 8, niin virhe kertyy termiin x 15 kertoimella (13/3) 14 10 9. Termin x 15 absoluuttinen virhe voisi olla siis luokkaa 10. 3.9.1 Konvergenssin tehokkuus Tarkastellaan lukujonoa a 1,a 2,,a n, missä a n = 1. Halutaan laskea lukujonosta π:n arvo tarkkuu- ja minkä approksimointivirhe on 1 della 10 6. Ratkaisemalla yhtälö 4n+1 n j=1 2 16j 2 1 n π 4 1 4n+1 = 10 6 saadaan, että n = 250.000 termiä tulee kehittää sarjakehitelmästä π:n laskemiseksi halutulla tarkkuudella. Kasaantuva pyöristysvirhe on todennäköisesti suurempi kuin 10 6 ja algoritmi konvergoi liian hitaasti jotta vaadittu tarkkuus saavutettaisiin. Tehokkaan algoritmin tulisikin konvergoida nopeammin kuin mitä pyöristysvirheet kasaantuvat, jotta algorimi olisi luotettava. Kuva 6 esittää approksimointivirheen pienenemistä ja pyöristysvirheen kasvamista iteraatioiden funktiona. Jos laskentatarkkuus on e 1, niin algoritmi konvergoi niin kauan kuin pyöristysvirhe on hyväksyttävän pieni. Jos laskentatarkkuus on e 2, niin pyöristysvirhe on liian suuri ja algoritmi ei konvergoi. 29