[C]Rand() Clicca QUI per vedere il messaggio nel forum |
nous |
Un piccolo problema con il C... devo generare n numeri random uniformemente distribuiti in (0,1).
Sapendo dell'esistenza di drand48() che proprio di questo si occupa, l'ho utilizzata. Senonchè non è possibile inizializzare drand48() passandogli un valore come si fa comunemente con rand().
Allorchè ho pensato : uso rand(time(NULL))/MAX_RAND e ottengo dei valori uniformemente distribuiti tra [0,1] , probabilmente non mi usciranno mai lo 0 e l'1 e quindi vabbene lo stesso perchè almeno inizializzo il generatore di numeri random in maniera diversa ad ogni lancio del programma.
Ma , incredibile dictu, mi da dei problemi proprio sul time(NULL), il problema lo posto estensivamente domani ma fondamentalkmente non funziona se non eliminando time(NULL), e a quel punto tanto vale usare drand48() che mi genera un intervallo aperto.
Tutto chiaro, no?Avete idee??Il sistema operativo è ovviamente Linux, Red Hat 9.Grazie a chi mi aiuta. |
Gwath |
hai provato a inizializzare il seme con srand(valore) e poi a fare rand()/MAX_RAND ??? |
Renaulto |
e' vero, prima devi inseminarlo con srand() |
lorenzo |
Semmai srand48(long seed), o meglio seed48(unsigned short seed[3]), che come parametro vuole un vettore con i 3 interi che compongono il seme da 48 bit, e ritorna il puntatore al vecchio seme (di cui puoi anche fregartene bellamente).
Ma non ho capito se tu vuoi un intervallo aperto o chiuso... drand48 ti dà un double nell'intervallo [0, 1) mi pare.
EDIT:
Che poi, se il problema è con la time(), continuerà a esserci visto che probabilmente userà la stessa funzione per inizializzare il seme (inizializzare con una costante non ha molto senso...) |
|
|
|