maanantai 27. toukokuuta 2019

9999 potenssiin 9999

Silmiini osui tehtävä, jossa piti selvittää, kuinka monta numeroa on luvussa $9999^{9999}$ ja mitkä ovat kolme ensimmäistä numeroa. Ilmeisestikin kyseessä logaritmien harjoittelu ja käytettävissä laskin tai vastaava tietokoneohjelma.

Samantyyppisiä tehtäviä lienee aina käytetty logaritmien harjoittelemiseen. Klassikossa, K. Väisälän algebran kirjassakin on tehtävä, jossa kysytään luvun $9^{9^9}$ numeroiden lukumäärää. Tuolloin ei ollut laskimia, ainoastaan viisidesimaaliset logaritmitaulut.  Näilläkin tehtävän saattoi ainakin melkein ratkaista, numeroita oli noin 370 miljoonaa.  Paljon tarkempaan ei ollut mahdollista päästä eikä ensimmäisten numeroiden selvittämiseenkään tarkkuus riittänyt.

Potenssi $9999^{9999}$ on vaatimattomampi kuin $9^{9^9}$ ja ensimmäiseksi tekee mieli koettaa, selvittäisiinkö ilman logaritmeja, yksinkertaisesti laskemalla kokonaislukupotenssi suoraan normaalilla ohjelmiston aritmetiikalla. GeoGebralle ja TI-Nspirelle luku on liian suuri, GeoGebra antaa kysymysmerkin, TI-Nspire $\infty$-symbolin ja varoituksen ylivuodosta.

Mathematica sen sijaan laskee luvun ja antaa pitkän jonon numeroita. Näiden lukumäärän laskeminen olisi ikävä tehtävä, mutta tarkoitukseen on valmis funktio IntegerLength, jolla tulokseksi saadaan 39996 numeroa. Kolme ensimmäistä ovat 367. Mathematicaan pohjautuva verkossa toimiva Wolfram|Alpha ei anna suoraan kaikkia numeroita, mutta kertoo niiden lukumäärän. Onko enää tarpeen miettiäkään logaritmeja, jos laskentaohjelmien kapasiteetti kasvaa näinkin suureksi?

Jos kuitenkin käytetään logaritmeja, kannattaa aluksi laskea potenssin logaritmi muodosta $9999\lg(9999)$, missä $\lg$ tarkoittaa kymmenkantaista (Briggsin) logaritmia. GeoGebra antaa tulokseksi $39995.57$. Tämän kokonaisosa $39995$ on logaritmin ns. karakteristika.  Tämä on yhtä pienempi kuin luvun numeroiden määrä, joka siis on 39996. Desimaaliosa $0.57$ on logaritmin mantissa, jonka avulla saadaan luvun numeroiden alkupää. Tämä perustuu hajotelmaan
\[ 9999^{9999} = 10^{39995.56\dots} = 10^{39995} \cdot 10^{0.56\dots}. \]
GeoGebra kuitenkin tuottaa pienen yllätyksen: $10^{0.57} = 3.72$, mutta jos talletetaan muuttujaan alkuperäinen logaritmi, $s = 9999\lg(9999)$, ja lasketaan $10^{s-39995}$, saadaankin $3.68$. Ovatko oikeat alkupään numerot siis 372 vai 368?

Lasku GeoGebralla

TI-Nspirellä käy suurin piirtein samoin.

Selityksenä on, että ohjelmistojen numeerisessa laskennassa on käytössä huomattavasti enemmän desimaaleja kuin käyttäjälle normaalisti näytetään. Tarkkuuden säilyttämiseksi kannattaa siis tallettaa välitulokset muistiin eikä kopioida niitä uudelleen näytön mukaisina. Tämäkään ei poista kaikkia virheitä, koska laskennassa kuitenkin käytetään rajallista desimaalimäärää (tai oikeastaan bittimäärää). Jossakin tilanteessa virhe tulee aina esiin.

Olisiko logaritmien lisäksi jotakin muuta tapaa suoriutua tehtävästä, jos laskentaväline ei suoriudu suurista luvuista ilman ylivuotoa? Kantaluvun $9999$ voi skaalata jakamalla sen $10000$:lla. Tällöin syntyy luku $0.9999$, jonka korottaminen potenssiin $9999$ ei aiheuta ylivuotoa. Tulos on $0.36789\dots$, mikä antaa ensimmäiset numerot. Numeroiden lukumäärä saadaan kertomalla tämä skaalauksen takia tekijällä $10000^{9999} = 10^{39996}$.

Mitä kaikesta tästä — ja paljosta muusta vastaavasta — pitäisi oppia? Ohjelmisto on ensisijaisesti laskentaväline olipa kyse numeerisesta tai symbolisesta laskennasta. Se toimii omilla ehdoillaan eikä aina siten, kuin matemaattisessa mielessä pitäisi. Laskentaväline myös vaikuttaa siihen, millaista matematiikkaa on järkevää käyttää. Esimerkiksi logaritmitaulut ja ohjelmistot edellyttävät erilaista näkökulmaa.

Ei kommentteja: