Ajattelin huvin vuoksi ja aloittelijana ohjelmoida C:llä ohjelma, jolla voi laskea yhteen kaksi suurta kokonaislukua. Ajattelin, että koska luvut ei mahdu listaan, niin mikä olisi nopein tietorakenne ohjelman toteuttamiseen? Mieleen tuli, että jot tekisin linkitetyn listan, jossa olisi kutakin lukua varten char-tyyppinen muuttuja.
Vai onko nopeampaa ensiksi muuntaa luku binaarijärjestelmään, laskea siellä luvut yhteen ja muuntaa tulos 10-järjestelmään. En vaan keksi nopeaa tapaa muuntaa isoa lukua 2-järjestelmään.
Onkohan jossain julkaisussa luettavissa matemaattisten algoritmien aikavaativuuksista?
Vai onko nopeampaa ensiksi muuntaa luku binaarijärjestelmään, laskea siellä luvut yhteen ja muuntaa tulos 10-järjestelmään. En vaan keksi nopeaa tapaa muuntaa isoa lukua 2-järjestelmään.
Onkohan jossain julkaisussa luettavissa matemaattisten algoritmien aikavaativuuksista?
Vastaukset 5
Vanhimmat
Mikä on mielestäsi iso luku?
että se ei mahdu long-muuttujaan, mutta koneen muistiin.
thats it dude
bcd (binary coded decimal) joka mahdollistaa paljon suurempia lukuja kuin long (pakko koska taseet pitää täsmätä sentin tarkuudella vaikka luvut olisivat suuruusluokaltaan satoja miljardeja euroja.
periaate on yksinkertainen: luvulle on varattu riittävän iso muistialue olioon mihin luku on tallennettu binäärilikuna. Kaikki laskutoimitukset on koodattava uudestaan (operator overloading).
Joku on varmasti jo tehnyt tämän, ja ellen muista väärin bcd on sisäänrakennettu Cobol-kieleen.
Muistelisin, että jossain oli 100 desimaalin tarkkuudella valmis kirjasto. Ainakin aiheeseen löytyi pikaisesti pari linkkiä:
http://www.netlib.org/cephes/
members.lycos.co.uk/keithmbriggs/quad.html