Isot luvut

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?
5445
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

Mikä on mielestäsi iso luku?

Äänestä
  • että se ei mahdu long-muuttujaan, mutta koneen muistiin.

    Äänestä

  • matikkaohjelmoija kirjoitti:

    että se ei mahdu long-muuttujaan, mutta koneen muistiin.

    thats it dude

    Äänestä

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.

Äänestä
  • 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

    Äänestä

Kommentoi aloitusta


matikkaohjelmoija kirjoitti:

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?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu