Avatar billede gulbaek Nybegynder
05. juli 2005 - 14:52 Der er 11 kommentarer og
2 løsninger

Random metode med 'min' og 'max' værdier

Hejsa, ved godt at dette spørgsmål har været stillet en del gange før herinde, men tillader mig at spørge igen :-)

Skal lave en lille funktion

int Random(int low, int high);

Der er ingen problemer i at finde et tilfældigt tal udfra max værdien. "rand() % max", men mit problem opstår når jeg skal tage højde for 'min' værdien kan ikke lige gennemskue hvordan jeg laver det simplest
Avatar billede soreno Praktikant
05. juli 2005 - 14:56 #1
Prøv noget ala:
rand() % (high - low) + low
Avatar billede gulbaek Nybegynder
05. juli 2005 - 15:03 #2
sikker på den holder ?
f.eks. high = 10 & low = 5  her vil (high - low) = 5  hvilket gør at der kommer til at stå rand() % 10  hvilket jo ikke garantere at det er over min.  Kan så også godt ske at det blir læst som rand() % 5 og derefter blir low langt til
Avatar billede Slater Ekspert
05. juli 2005 - 15:05 #3
Ej, det vil der altså ikke stå. Husk lige de matematiske regler - gange udføres før plus.
Avatar billede gulbaek Nybegynder
05. juli 2005 - 15:13 #4
hmm, selvfølgelig rigtig, men er jeg ikke nødtil at lægge 1 til high, hvis jeg har min = 5 og high = 10 ellers er det jo ikke være muligt at få 10 som resultat.
Avatar billede arne_v Ekspert
05. juli 2005 - 15:13 #5
rand() % (high - low) + low

er god nok - eventuelt:

rand() % (high - low + 1) + low
Avatar billede arne_v Ekspert
05. juli 2005 - 15:14 #6
Avatar billede gulbaek Nybegynder
05. juli 2005 - 15:20 #7
Takker arne_v det må være rand() % (high - low + 1) + low jeg skal bruge for at få alle tallene incl. ved også godt at det ikke er verdens bedste random funktion, men den opgave jeg skal løse kræver at jeg benytter mig af rand()

soreno og arne_v smider i ikke lige et svar så jeg kan få lukket spørgsmålet igen.
Avatar billede soreno Praktikant
05. juli 2005 - 15:40 #8
Ok.
Avatar billede arne_v Ekspert
05. juli 2005 - 15:42 #9
.
Avatar billede gulbaek Nybegynder
05. juli 2005 - 15:55 #10
Håber fordelingen er fair nok, trods alt soreno der kom først.
Avatar billede arne_v Ekspert
05. juli 2005 - 15:57 #11
helt ok
Avatar billede s.nielsen Nybegynder
13. juli 2005 - 00:19 #12
Man bør nok anvende
min + (max - min) * rand() / (RAND_MAX + 1)

For at undgå at bruge low order bits (som i en del implementationer er
betydeligt mindre tilfældige end high order bits).
Avatar billede arne_v Ekspert
13. juli 2005 - 08:01 #13
godt råd (er iøvrigt omtalt i artiklen jeg linker til)

det er dog nok stadig:

min + (max - min + 1) * rand() / (RAND_MAX + 1)

spørger skal bruge
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester