Random in C

Sekcia: Programovanie 05.10.2010 | 23:22
piXo   Návštevník
Zdravim, skusil som si len tak nakodit generovanie nahodnych cisel, a robim to pod linuxom a neberie mi to,. v kode mam priincludovanu kniznicu stdlib.h, aj time.h. ziadny random(cislo) ani rand(cislo) mi nefunguje, uz som aj guglil, no neviem,..-1075758420, to je jediny vysledok co mi niekedy vyhodi.. dik za radu

    • Re: Random in C 05.10.2010 | 23:27
      Avatar borg Fedora  Administrátor
      a inicializoval si pseudogenerator nahodnych cisiel pomocou srand() ?
      • Re: Random in C 05.10.2010 | 23:31
        piXo   Návštevník
        srand(time(NULL))
        to tam mam, ano...
        • Re: Random in C 05.10.2010 | 23:40
          Avatar borg Fedora  Administrátor
          skus hodit ako to pouzivas, rand() vracia hodnoty medzi 0 a RAND_MAX.
          • Re: Random in C 05.10.2010 | 23:46
            piXo   Návštevník
            x[i][j]=rand(100);

            • Re: Random in C 05.10.2010 | 23:48
              piXo   Návštevník
              soryy, x=rand() % 1000;
              uz to hadze nejake cisla, ale vsetky rovnake :D
            • Re: Random in C 05.10.2010 | 23:48
              Avatar borg Fedora  Administrátor
              pokial si pamatam tak rand ma prototyp:

              int rand();
              • Re: Random in C 05.10.2010 | 23:53
                piXo   Návštevník
                no neviem, stale sa to serie, sakra, kedysi davno som hladal ten random pre dev c++ a tam som to nejak vyriesil, tak asi idem googlit a nakuknut do kniznic, ale ak by niekto mal tak sem moze hodit code...
                • Re: Random in C 06.10.2010 | 00:19
                  Avatar borg Fedora  Administrátor
                  a nepozivas srand() nahodou vo vnutri tej istej slucky, ako volas rand()?
                  • Re: Random in C 06.10.2010 | 02:14
                    piXo   Návštevník
                    nie, je to nad tym, nieje to v tom cykle...sakra, mne sa vidi, ze tam nieco total primitiv je ale si neviem spomenut sakra...
    • Re: Random in C 06.10.2010 | 00:37
      WlaSaTy   Návštevník
      Je to uz roky co som posledne robil v C. Ale aky mas kod? Mne moj funguje.
      $ echo '
      > #include <stdlib.h>
      > #include <stdio.h>
      > #include <time.h>
      >
      > void main () {
      > int i;
      >
      > srandom(time(NULL));
      > for (i=0;i<20;i++)
      >         printf("%i\t%i\n",i,random());
      > }
      > '|gcc -o random -xc - && ./random
      <stdin>: In function ‘main’:
      <stdin>:11: warning: format ‘%i’ expects type ‘int’, but argument 3 has type ‘long int’
      0       1246375613
      1       1767516159
      2       1077419113
      3       1135168903
      4       385880061
      5       1580507113
      6       956199419
      7       576043726
      8       1425671823
      9       565366010
      10      654285134
      11      16069622
      12      1867766626
      13      612704936
      14      1206736049
      15      1755474849
      16      1292431244
      17      103944179
      18      2068720883
      19      1070296638
      $
      
      • Re: Random in C 06.10.2010 | 12:16
        C-coder   Návštevník
        Este ze si napisal, ze si dlho nerobil v C. Mas to dost na rit urobene. Mas tam jeden warning.
        Odporucam prekladat so -std=99 -Wall -pedantic -w...
        • Re: Random in C 06.10.2010 | 15:11
          Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
          Ten warning tam vidno. Staci pretypovat a uz to je v poriadku. Len dodam, ze treba este davat pozor na to, ze RAND_MAX je vacsinou iba 65535.

          Ak treba nejaky lepsi random, tak odporucam napriklad tento: http://www.agner.org/random/.
          Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
          • Re: Random in C 06.10.2010 | 19:01
            WlaSaTy   Návštevník
            >Ak treba nejaky lepsi random
            Ja zas /dev/urandom alebo /dev/random, podľa potreby.
            • Re: Random in C 07.10.2010 | 00:19
              Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
              Da sa aj tak, ale /dev/urandom nie je na vsetkych platformach a taktiez nie je az take trivialne ziskat pomocou vystupu urandom napriklad desatinne cislo v rozmedzi 0 az 1, ktore zarucuje rovnomerne rozlozenie napriklad na 8 desatinnych miest. Resp. treba nieco vediet o tom generatore a jeho vlastnostiach a preto je niekedy lepsie pouzit uz hotovu kniznicu, kde si clovek moze byt istejsi, ze ten generator ma take vlastnosti, ako autor deklaruje a nedovrze to, ak sa niekde sekne.

              Tu by som rad vytiahol jeden zlozvyk, ktory som videl v mnohych programoch a to napriklad ziskanie nahodneho prirodzeneho cisla mensieho ako 1000 sposobom rand()%1000. Pozor! Toto je zle, vystup nie je rovnomerne rozlozeny, resp. pravdepodobnost vytiahnutia jednotlivych cisel nie je rovnaka!
              Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
              • Re: Random in C 07.10.2010 | 02:36
                WlaSaTy   Návštevník
                Preto som písal podľa potreby.

                Ale, na ktorej platforme si nevidel urandom? Ja som ho zatiaľ videl na všetkých, až na MIPS kde som sa ešte nepozeral aj keď mám aj ten k dispozícii.

                Inak, generátory a pseudogenerátory náhodných čísel sú celým priemyselným odvetvím a ich použitie sa nedá zhrn do jedného príspevku, na tomsa asi zhodneme.
                • Re: Random in C 07.10.2010 | 02:39
                  Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
                  Sorry, zle som sa vyjadril. Myslel som operacny system a konkretne Windows, pro ktory obcas tiez treba robit softver. Taktiez neviem, ako je na tom iPad/iPhone, ktory ma coskoro caka :(
                  Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
                  • Re: Random in C 07.10.2010 | 11:48
                    WlaSaTy   Návštevník
                    To je pravda. Ale vzhĺadom na povahu pôvodnej otázky mu asi bohate stačí ten bežný generátor pseudonáhodných čísel ktorý mu nešiel preložiť.

                    Nepredpokladám že by to chcel používať v priemysle, to by navrhoval zostavu s ohľadom na potreby HW generátora náhod. Buď by vybral CPU ktoré má v sebe šifrovanie (randomizer je jeho potrebnou súčasťou), alebo rovno šifrovaciu akceleračnú kartu do slotu alebo aspoň, kedysi sa robili dosky čo vedeli generovať náhodný śum. Barličky typu služba čo počúva na stereo mikrofóne a z toho generuje random dáta sú asi nie veľmi podporované na rôznych OS.