PDA

View Full Version : [C] generazione di numeri pseudocasuali float!


jonson
04-01-2004, 10:40
devo ottenere tramite la funzione rand() un numero di tipo float. è possibile? avevo pensato a una funzione del genere:
n=(float)rand() % n; con n ed m di tipo float. il compilatore mi da errore in quanto entrambe le variabili sono di tipo float.

dunque ho sbagliato sicuramente, ma alla fine questa cosa si può fare oppure no?

cionci
04-01-2004, 11:23
Che io sappia % è l'operatore di resto della divisione intera...di conseguenza non credo che n possa essere float... Anche se non ho mai provato...

Io farei una cosa del genere:

int n = MAX_CHE_TI_PARE;

float f = ((float)(rand()%n)*(float)(rand()%n))/(float)(1+rand()%(n-1));

Credo che così possa andare...e dovrebbe rispettare anche la distribuzione di rand...

jonson
04-01-2004, 11:30
io infatti uso l'operatore % per ottenere numeri random compresi in un intervallo e per gli interi funziona.

per il resto vedrò di provarlo.

grazie

cionci
04-01-2004, 11:40
Riguardo al rispettare la ditribuzione...mi sa che ho detto una cavolata...

Vediamo di studiarla in un altro modo:
int n = MAX;

float num = (float)(rand()%n);
Così ti da numeri float, ma sempre senza decimali... Se ti interessano anche i decimali potresti fare una cosa del genere:

float num = (float)(rand()%n) + (float)rand() / (float)RAND_MAX;

Questo dovrebbe andare già meglio... Ovviamente i numeri generati sono compresi fra 0 e n+1 (non raggiungono mai n+1)...

jonson
04-01-2004, 11:50
grazie cionci funziona alla perfezione. :)
cmq anche la soluzione che mi avevi postato prima funziona, anche se non ti so dire se rispetta o meno la distribuzione

ciao e grazie ancora