|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Sep 2004
Città: Napoli
Messaggi: 23
|
rand() numeri random in c++
Salve a tutti, qualcuno mi sa spiegare come generare numeri casuali in c++?
Come utilizzo la funzione rand() per generare double da 0 a 1? O comunque in un generico intervallo? Ho provato ad utilizzare una funzione di Root: TRandom 3...ma mi genera sempre la stessa sequenza di numeri, e per quello che devo fare non mi è utile. Grazie a tutti! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 352
|
prima devi fare
randomize(); |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2007
Messaggi: 292
|
rand () restituisce un intero tra 0 (o 1?) e RAND_MAX, una costante definita in stdlib
(double) rand ()/RAND_MAX è quindi sufficiente per generare un numero reale uniformemente distribuito in (0, 1) Occhio però che il generatore è piuttosto scadente (ha un periodo troppo piccolo, principalmente...). Se devi fare della buona simulazione statistica, esistono routine molto più efficienti (mersenne twister, sobol ecc...). |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 352
|
oppure puoi usare la funzione
int random(int num); ad esempio se fai Codice:
random(100); |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 352
|
|
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Sep 2004
Città: Napoli
Messaggi: 23
|
Grazie mille,
lo terrò a mente. Per il momento ho risolto in maniera più "pulita", con TRandom r(0) mi cambia seme in continuazione con la cadenza del clock e mi genera direttamente in (o,1]. Ora invece sono alle prese con una banalissima allocazione di un array...che però non da i risultati sperati. for(int j=0; j<40;j ++){ TRandom r(0); x = new double [128]; //sto allocando un array di 128 unità r.RndmArray(128,x); double somma=0; for(int i=0; i<128; i++) { f[i]=x[i]**3; somma += f[i]; media = somma/(i+1); } m[j]=media; sommam += m[j]; stima= sommam/(j+1); cout <<endl<<stima<<endl; delete[]x; //libero la memoria } In effetti devo fare una media di 128 valori tra o e 1, e questo lo faccio con il for interno, e questo devo farlo per 40 volte, quindi ottenere 40 stime diverse della media, per farne poi un'ulteriore media. In questo modo speravo di utilizzare x e poi riutilizzarlo all'incremento di j...ma non va! |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
random e randomize non sono funzioni standard del C++...ma derivano dalla libreria Borland. E quindi basta cambiare compilatore che non ritrovereste più quelle funzioni
Per generare numeri random si fa così: srand((unsigned)time(NULL)); //inizializza il generatore di numeri casuali rand() ritorna un intero fra 0 e RAND_MAX Seguite queste guida: http://www.hwupgrade.it/forum/showthread.php?t=1196677 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:45.