View Full Version : [C]random per generazione di numeri anche negativi
santaclause83
09-10-2007, 15:02
devo fare una funzione che genera double random tra 1 e -1
srand(time(NULL));
double nuovo = (double) rand()/(double)RAND_MAX; può funzionare??
...per prendere anche i negativi e mantenermi più casuale possibile come potrei fare??
avevo pensato a moltiplicare il random per RAND_MAX e dividere per 2,se è divisibile lo moltiplico per -1 altrimenti lo lascio così com'è...
non è che ci sono metodi più efficaci per un calcolo del genere??
((double)rand()/(double)(RAND_MAX))*2 - 1
Così ottieni un double fra -1 e 1 compresi ;)
Ziosilvio
09-10-2007, 15:26
http://www.hwupgrade.it/forum/showthread.php?t=1196677
Lo so che dovrei aggiornarla, ma qualcosina ancora la dice...
Ziosilvio
09-10-2007, 15:27
((double)rand()/(double)(RAND_MAX))*2 - 1
(double)rand()/(double)(RAND_MAX+1) ecc.
santaclause83
09-10-2007, 15:30
grazie mille! ma non capisco come fa..nel senso:
-Il random estrae un double grande massimo quanto RAND_MAX
-il RAND_MAX viene moltiplicato per 2,quindi darà un double grande qualcosa tipo 64mila e qualcosa
-il -1 cos'è??non è moltiplicato vero??..
sembra che sopra io abbia massimo rand max e sotto rand max per il doppio sottratto di uno...
grazie ancora!
Vedi anche un mio esempio in <questa> (http://www.hwupgrade.it/forum/showthread.php?t=1330044) discussione.
(double)rand()/(double)(RAND_MAX+1) ecc.
Il tuo discorso è giusto per ottenere la distribuzione di probabilità esatta, ma non permette di ottenere il +1 come rosultato finale ;)
santaclause83: ti tolgo il (double) per farti capire meglio
(rand()/RAND_MAX) * 2 - 1
rand()/RAND_MAX permette di ottenere un numero fra 0 e 1 compresi.
Lo moltiplichi per 2 ed hai quindi un numero fra 0 e 2, ci togli 1 ed ottieni un numero fra -1 e +1 compresi.
Ziosilvio
10-10-2007, 15:49
-Il random estrae un double grande massimo quanto RAND_MAX
rand restituisce un intero compreso tra 0 e RAND_MAX inclusi.
-il RAND_MAX viene moltiplicato per 2,quindi darà un double grande qualcosa tipo 64mila e qualcosa
Non è solo RAND_MAX a essere moltiplicato per 2, ma tutta la quantità (double)rand()/(double)(RAND_MAX).
-il -1 cos'è??non è moltiplicato vero?
Naturalmente no: la moltiplicazione dà un risultato compreso tra 0.0 e 2.0 inclusi (come fa giustamente osservare cionci), quindi sottraendo 1 ottieni una quantità compresa tra -1.0 e 1.0 inclusi.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.