C++ -kirjasto suurien lukujen operaatioihin
Pelttari, Joonas (2021)
Pelttari, Joonas
2021
Tieto- ja sähkötekniikan kandidaattiohjelma - Bachelor's Programme in Computing and Electrical Engineering
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-06-14
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202106155911
https://urn.fi/URN:NBN:fi:tuni-202106155911
Tiivistelmä
Tässä työssä toteutetaan C++ -ohjelmointikielellä kirjasto, jolla voidaan laskea perusoperaatioita suuremmille luvuille kuin tavallisesti kokonaislukuja (engl. integer) käyttämällä pystyttäisiin. Toteutettu ohjelma käyttää lukujen käsittelyssä ja tallentamisessa merkkijonoja (engl. string), mikä mahdollistaa suurien lukujen operaatioiden laskemisen merkkijonon maksimipituuden ollessa 2³²-1 eli 4 294 967 295 merkkiä. Vertailuna C++ -kielen suurin mahdollinen kokonaisluku on 20 merkkiä pitkä (18 446 744 073 709 551 615).
Toteutetut operaatiot ovat yhteen-, vähennys- ja kertolasku, mutta tämän lisäksi työhön toteutettiin myös mahdollisuus suorittaa Karatsuba-algoritmi eripituisille luvuille ja näin todeta sen toteutuksen olevan linjassa asymptoottisen suoritusajan kanssa.
Työssä käsitellään algoritmien ja niiden pseudokoodien teoriaa sekä toteutetaan C++ -ohjelmointikielelle käsiteltävät algoritmit sillä tavalla, että niiden vertaaminen esitettyyn pseudokoodiin on mahdollista ja helpohkoa C++ -ohjelmointikieltä osaavalle henkilölle. Tämä palvelee työssä lyhyesti mainittua ideaa siitä, että työtä olisi mahdollista hyödyntää toteutettaessa vastaavat operaatiot jollekin toiselle ohjelmointikielelle.
Algoritmien asymptoottiset suoritusajat suuria lukuja käsittelevissä operaatioissa ovat tärkeässä osassa, joten niitä tarkastellaan sekä teoreettisella että käytännön tasolla. Käytännön tarkastelussa suoritetaan toteutettua C++ -ohjelmaa ja lasketaan sieltä saatavat asymptoottiset suoritusajat verraten niitä teoreettisiin. Käytännön tasolla on myös tärkeää huomioida, että parempi asymptoottinen tehokkuus ei välttämättä tee algoritmista toista nopeampaa, koska suuret vakiotermit saattavat jäädä huomioimatta ja siksi käytännössä tehokkuus riippuu käsiteltävien lukujen suuruudesta.
Toteutetut operaatiot ovat yhteen-, vähennys- ja kertolasku, mutta tämän lisäksi työhön toteutettiin myös mahdollisuus suorittaa Karatsuba-algoritmi eripituisille luvuille ja näin todeta sen toteutuksen olevan linjassa asymptoottisen suoritusajan kanssa.
Työssä käsitellään algoritmien ja niiden pseudokoodien teoriaa sekä toteutetaan C++ -ohjelmointikielelle käsiteltävät algoritmit sillä tavalla, että niiden vertaaminen esitettyyn pseudokoodiin on mahdollista ja helpohkoa C++ -ohjelmointikieltä osaavalle henkilölle. Tämä palvelee työssä lyhyesti mainittua ideaa siitä, että työtä olisi mahdollista hyödyntää toteutettaessa vastaavat operaatiot jollekin toiselle ohjelmointikielelle.
Algoritmien asymptoottiset suoritusajat suuria lukuja käsittelevissä operaatioissa ovat tärkeässä osassa, joten niitä tarkastellaan sekä teoreettisella että käytännön tasolla. Käytännön tarkastelussa suoritetaan toteutettua C++ -ohjelmaa ja lasketaan sieltä saatavat asymptoottiset suoritusajat verraten niitä teoreettisiin. Käytännön tasolla on myös tärkeää huomioida, että parempi asymptoottinen tehokkuus ei välttämättä tee algoritmista toista nopeampaa, koska suuret vakiotermit saattavat jäädä huomioimatta ja siksi käytännössä tehokkuus riippuu käsiteltävien lukujen suuruudesta.
Kokoelmat
- Kandidaatintutkielmat [8253]