Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Community > Forum De Bell Tolls
 
[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...)

AlphaGamma
Nous, sei andato a vederlo il mio generatore percorsi? :D
Li faceva random, non ricordo come, ma randomizzava bene. :)

http://www.dsy.it/forum/showthread.php?s=&threadid=2606

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate