iso randomi

Anonyymi

Mikähän olis kätevin tapa generoida satunnaisluku unsigned long long- tyyppiseen muuttujaan? Kääntäjän mukana tuleva rand() kun ei osaa kuin int-tyyppisen luvun arpomaan.

4

782

    Vastaukset 4

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Kuinka monta bittiä "int" ja "unsigned long long" ovat sinulla?

      Jos ovat yhtä monta bittiä, niin sitten vaan cast int:sta toiseen tyyppiin. Jos int on vaikka puolet pienempi niin sitten generoi kaksi int:iä ja yhdistä ne yhdeksi suuremmaksi luvuksi tyyliin (a << int_bittimäärä) | b

    • Anonyymi

      Generoi satunnainen double 0 ja 1 väliltä ja sitten kerrot luvun kokonaislukutyypin maksimilla.

      • Anonyymi

        Hmm.. ei välttämättä toimi. Joissakin arkkitehtuureissa double on muistaakseni 48 bittiä sisäisessä esitysmuodossa ja tästä ei 64 bittistä entropiaa revitä. Tekisin oman rand64-tyypin ja unionin. rand-funktiolle c-standardi takaa muistaakseni 15 bittiä entropiaa minimissään, joten kyllä siinä ihan tosissaan bittiä saa nyplätä jos haluaa geneerisen ratkaisun. Alla jotain mietteitä toteutuksesta:

        #include<stdio.h>
        #include<stdlib.h>

        typedef unsigned long long rand_type;

        typedef struct rand_t {
        union {
        rand_type big_rand;
        char rnd[sizeof(rand_type)];
        };
        } Rand;

        int main(void)
        {
        Rand num;
        for(int i=0; i < sizeof(Rand); i )
        {
        num.rnd[i] = rand(...) % 0xff;
        }
        printf("big_rand: %llu (RANDMAX=%llu)\n", num.big_rand, RAND_MAX);
        return 0;
        }
        Näkee hyvin, ettei geneerinen ja nopea koodi aina kulje käsi kädessä. Tätä en käyttäisi juuri missään..


      • Anonyymi
        Anonyymi kirjoitti:

        Hmm.. ei välttämättä toimi. Joissakin arkkitehtuureissa double on muistaakseni 48 bittiä sisäisessä esitysmuodossa ja tästä ei 64 bittistä entropiaa revitä. Tekisin oman rand64-tyypin ja unionin. rand-funktiolle c-standardi takaa muistaakseni 15 bittiä entropiaa minimissään, joten kyllä siinä ihan tosissaan bittiä saa nyplätä jos haluaa geneerisen ratkaisun. Alla jotain mietteitä toteutuksesta:

        #include<stdio.h>
        #include<stdlib.h>

        typedef unsigned long long rand_type;

        typedef struct rand_t {
        union {
        rand_type big_rand;
        char rnd[sizeof(rand_type)];
        };
        } Rand;

        int main(void)
        {
        Rand num;
        for(int i=0; i < sizeof(Rand); i )
        {
        num.rnd[i] = rand(...) % 0xff;
        }
        printf("big_rand: %llu (RANDMAX=%llu)\n", num.big_rand, RAND_MAX);
        return 0;
        }
        Näkee hyvin, ettei geneerinen ja nopea koodi aina kulje käsi kädessä. Tätä en käyttäisi juuri missään..

        Olet oikeassa double-tyypin entropiasta. Yleensä rand-standardifunktiota koskee sama rajoitus hieman toisessa muodossa eli koodisi todennäköisesti antaa jollakin syklillä toistuvia "satunnaisnumeroita". Standardifunktio on usein toteutettu yksinkertaisella PRNG-algoritmilla, jossa siemenluku on esimerkiksi 32-bittinen.

        https://en.wikipedia.org/wiki/Pseudorandom_number_generator

        Suosittelisin tähän jotakin omaa PRNG-toteutusta, jossa siemenluvussa on bittejä ainakin kaksi kertaa se määrä mitä unsigned long long -tyypissä. Algoritmi on yksinkertainen, vain kerto- ja yhteenlasku isoilla kokonaisluvuilla aiheuttavat pientä päänvaivaa. Testaamista unohtamatta.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. 124
      1385
    2. Costa Rica on tympeän makuinen kahvi

      Ostin kahvin hinnan romahduksen kunniaksi Costa Rican "Premium Blendiä". Piti olla sataprosenttista arabialaista. No ain
      Maailman menoa
      86
      1267
    3. Hei, voitko kuunnella

      Voisitko auttaa minua selvittämään asioita? En halua ajaa sinua hulluuteen kanssani, en sitoa sinua, en esittää vaatimu
      Ikävä
      141
      1249
    4. Joku porukka lähtenyt täältä

      Ihmeen hiljainen on palsta nyt. Yleensä tänne tulvii aloituksia yms, mutta nyt on kyllä erikoisen hiljaista.
      Ikävä
      242
      1160
    5. Se kun olit pitkästä aikaa silmieni edessä

      Oli kyllä sykähdyttävää. Tiedätkö, mikä laittaa minut ikävöimään sinua? Kun palautan mieleeni valtavan ihanan olemuksen,
      Ikävä
      57
      1036
    6. 65
      939
    7. Tuletko tänään

      Jos soitan? Niin... tuletko?🖤
      Ikävä
      83
      881
    8. Vieläkään ei voi opiskella kursseja korkeakoulussa?

      Vaikka lakiin tehty muutos hän ei saanut opiskella työttömyystuella. https://yle.fi/a/74-20244925
      Työttömyys
      14
      862
    9. Onkin niin, että olet hulluna minuun

      mutta et uskalla sitä tuoda ilmi. Salaa haaveilet kiihkeästä suhteesta, vaan siihen se jää, ja syyksi esteet ja muut. S
      Ikävä
      42
      710
    10. Mitä on mietteissäsi

      Tänään?
      Ikävä
      65
      687
    11. Nyt ei enää ole

      Mitään mikä pitäisi mut hiljaa, kaikesta. Tämä on muutamalle henkilölle täällä.
      Ikävä
      42
      610
    12. Hämmentävä hetki: TTK:sta pudonnut Johanna Puhakka lataa pettyneenä: "Sitä ei voi kieltää"

      Johanna Puhakka ja Jurijs Jurza Trosenko tippuivat Tanssii Tähtien Kanssa -kisasta. Suositussa viihdeohjelmassa nähtiin
      Tanssii tähtien kanssa
      15
      568
    13. Taidan luopua

      Sinusta.
      Ikävä
      33
      554
    14. Mikä on hulluinta?

      Mitä ikäväsi kohde on tehnyt?
      Ikävä
      32
      549
    15. Jälleen näin nainen unta sinusta

      Aika usein tulet uniini, enkä tiedä, mitä se tahtoo minulle sanoa. Tällä kertaa en ollut kotonasi, vaan ulkona jossain t
      Ikävä
      28
      539
    16. Et taida olla ihan varma

      Päätöksestäsi?
      Ikävä
      65
      508
    17. En haluaisi sanoa tätä

      Mutta olet sokea sille, mitä sinulla jo on! Jos minä olisin sinä, pyrkisin tekemään kaikkeni kohentaakseni nykyistä pari
      Ikävä
      39
      495
    18. En olis uskonu

      et kuulut tollaseen porukkaan
      Ikävä
      86
      483
    19. Et siis halua

      Kansssani mitään
      Ikävä
      29
      479
    20. Meiltä löytyy kyllä älliä

      Vai mitä oot mieltä...
      Ikävä
      92
      475
    Aihe