generovanie náhodných čísel z intervalu C++

Programovacie jazyky, rady, poradňa...
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

generovanie náhodných čísel z intervalu C++

Príspevok od používateľa Fata! ChaoS »

Nazdar ľudia, mám istý problém, potrebujem generovať čísla z interval od -1 000 000 do 1 000 000, takže som spravil toto

Kód: Vybrať všetko

rand()%2000001-1000000;
Lenže nejak som zbadal, že furt mi generuje mínusovú hodnotu a to preto, lebo rand()%2000001 generuje len max 5 ciferné číslo.
Ale ja potrebujem taký interval aký som napísal, tak ako to vyriešiť? či prečo mi generuje len max 5 ciferné čísla?
Za pomoc ďakujem!
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Príspevok od používateľa konyk87 »

akeho typu je ta premenna, do ktorej priradujes? lebo ak je to len 16-bitovy datovy typ, tak ti viac ako 5-ciferne cislo ani nezoberie a dojde k preteceniu - pojde znova a znova od najmensej po najvacsiu moznu hodnotu..
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

No jasne nato som myslel, ale neukladám to do žiadnej premennej len to dávám vypisovať pomocou cout.
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Funckia rand() generuje cisla od 0 po RAND_MAX, co je najmenej 32767, co moze byt tvoj pripad. :?
rand()
Returns a pseudo-random integral number in the range 0 to RAND_MAX.
RAND_MAX is a constant defined in <cstdlib>. Its default value may vary between implementations but it is granted to be at least 32767.
http://www.cplusplus.com/reference/clib ... /rand.html
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

aha, to bude ono, nuž a dá sa to nejak zmeniť?
Určite sa dá prepísať knižnica, ale to by platilo len na mojom kompe, takže to asi nie, ale nedá sa nejak v programe nastaviť tú konštantu, kebyže ju dám inicializovať?
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Príspevok od používateľa konyk87 »

nie je jednoduchsie to cislo, ktore vrati rand() vynasobit niecim a priradit do nejakej premennej, a potom ju vypisat? :)
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

napr. takto:
(rand()%2001-1000)*(rand()%1000+1);
?
prvé rand vygeneruje cislo z intervalu od -1000 do 1000 a následné číslo ho vynásobí s jedným číslom z intervalu od 1 do 1000.
Alebo myslel si to nejak inak?
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

No dalo by sa to napriklad aj tak. :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

mňa by ale aj celkom zaujímalo načo je ti dobre generovať číslo z tak velkého rozsahu? čisto zo zvedavosti
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Nuž je to v zadaní v školskej programátorskej lige, že to má byť z takého intervalu. Pravdepodobne preto zadal profesor taký interval, aby účastníci prišli na túto chybu a vedeli to vyriešiť.
tuti
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 740
Registrovaný: 01 okt 2006, 19:23
Bydlisko: Prievidza

Príspevok od používateľa tuti »

skusim ti pomoct jednym linkom v ktorom sa dozvies ake su zaludnosti okolo nahodnych cisel a mas tam v podstate aj riesenie tvojho problemu:

http://cs.wikipedia.org/wiki/Line%C3%A1 ... r%C3%A1tor

namiesto rand() budes pouzivat generateNext() a namiesto x=0 das x=rand().

este doplnim ak by si sa podivoval nad tym prihladom ze preco tam nie je ziadne modulo tak vedz ze je to tym ze v tej tabulke je k hodnotam a=69 069 a b=1 priradene priradene m= 2na32 co je "zhodou okolnosti" velkost unsigned intu cize ked to bude viac tak to pretecie a je to modulo 2na32.

preco si nespravit vlastny generator pseudonahodnych cisel :D
Napísať odpoveď