PDA

View Full Version : [c] random limitata?


-Ivan-
31-03-2006, 16:58
come mai il seguente codice:


srand(time(NULL));

for(j=0;j<1000;j++)
{
for(i=0;i<2;i++)
{
//crea un numero compreso tra 0.000000000001 e 0.1 e le memorizza come coordinata
citta[i][j]= (rand() % 100000000000) /*/ 1000000000000*/;
}
}


con commentata la divisione mi crea al massimo numeri di 5 cifre???
E' forse un limite della random? Oppure un limite del mio cervellino che non capisce dove sia il problema?

Ziosilvio
31-03-2006, 17:11
Quel valore 1000000000000 che usi, e' una costante int, e va considerata modulo 2^(8*sizeof(int)).
Il che, tra l'altro, potrebbe anche farle cambiare segno.

-Ivan-
31-03-2006, 17:21
Quel valore 1000000000000 che usi, e' una costante int, e va considerata modulo 2^(8*sizeof(int)).
Il che, tra l'altro, potrebbe anche farle cambiare segno.

Dici quello commentato?
Il fatto è che io devo creare numeri a 12 cifre dopo la virgola minori o uguali a 0,1.
Ho pensato di creare numeri fino a 100000000000 e poi dividerli per 10000000000000 (lo stesso ma con uno 0 in più insomma).

wisher
31-03-2006, 21:44
mi pare che random sia molto più limitata, in particolare la sua dimensione è quella di un int...
il tuo problema è questo

Ziosilvio
01-04-2006, 11:14
io devo creare numeri a 12 cifre dopo la virgola minori o uguali a 0,1.
Allora puoi prima creare un numero random double fra 0 e 1, e poi dividerlo per 10.
Come fare la prima cosa, lo abbiamo già detto decine di volte.
Ho pensato di creare numeri fino a 100000000000
Ma non è detto che rand te lo consenta; anzi, in genere non lo consente.
e poi dividerli per 10000000000000
Semmai per 10000000000000.0, altrimenti ti viene una divisione fra interi il cui quoziente è 0.

-Ivan-
01-04-2006, 11:20
Scusa ma la domanda mi sorge spontanea, come si crea un numero random double tra 0 e 1? :eek:

Ziosilvio
01-04-2006, 12:19
Scusa ma la domanda mi sorge spontanea, come si crea un numero random double tra 0 e 1? :eek:
Scusa ma la risposta mi sorge spontanea: cerca nei vecchi post della settimana, oppure leggi sul K&R il comportamento di rand e traine le tue conclusioni.