PDA

View Full Version : [C] Numeri ancora più random


17Qwerty71
28-11-2005, 10:00
Sto facendo un programma dove mi occorre generare numeri pseudo-causali in tempi molto brevi (a distanza di massimo 2-3 secondi la generazione di uno da un'altro).
Il seme in srand viene iniettato dalla funzione time, la quale però in questo caso non usufruisce di molto la generazione di numeri pseudo-causali (nel senso che se il primo numero generato è 34, il secondo sta sui 40, il terzo sui 50 e così via...). Proprio perchè la generazione del numero successivo avviene quasi subito dopo quella del precedente.

Come posso risolvere questo? :confused:

andbin
28-11-2005, 10:52
Sto facendo un programma dove mi occorre generare numeri pseudo-causali in tempi molto brevi (a distanza di massimo 2-3 secondi la generazione di uno da un'altro).
Il seme in srand viene iniettato dalla funzione time, la quale però in questo caso non usufruisce di molto la generazione di numeri pseudo-causali (nel senso che se il primo numero generato è 34, il secondo sta sui 40, il terzo sui 50 e così via...). Proprio perchè la generazione del numero successivo avviene quasi subito dopo quella del precedente.

Come posso risolvere questo? :confused:
Ciao, puoi postare il codice che hai scritto così vediamo meglio? Mi sembra strana una sequenza 34, 40, 50 ecc...

17Qwerty71
28-11-2005, 11:08
Ciao, puoi postare il codice che hai scritto così vediamo meglio? Mi sembra strana una sequenza 34, 40, 50 ecc...

Facevo per dire che se genero i numeri con una distanza di tempo molto bassa il numero successivo generato a quello precedente è poco più grande.

Faccio magari un'esempio:

#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>

int main(void){

while(true){
getch();
randomize;
printf("%d", random(101));
}

return 0;
}

andbin
28-11-2005, 11:28
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>

int main(void){

while(true){
getch();
randomize;
printf("%d", random(101));
}

return 0;
}
Beh ... io sto facendo adesso qualche prova su linux e randomize, tanto per fare un esempio, non esiste ed inoltre random(), che esiste, è dichiarata come long int random(void). Suppongo che tu stia usando Windows o altro.
Comunque, in generale, l'inizializzazione del seme va fatta 1 sola volta all'inizio e non prima di generare ogni numero.

Prova il seguente codice:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
srand ((unsigned int) time (NULL));

while (1)
{
getchar ();
printf ("%d\n", rand () % 101);
}

return 0;
}

Poi dimmi se ti sembra più valido o meno. ;)

17Qwerty71
28-11-2005, 11:59
Beh ... io sto facendo adesso qualche prova su linux e randomize, tanto per fare un esempio, non esiste ed inoltre random(), che esiste, è dichiarata come long int random(void). Suppongo che tu stia usando Windows o altro.
Comunque, in generale, l'inizializzazione del seme va fatta 1 sola volta all'inizio e non prima di generare ogni numero.

Prova il seguente codice:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
srand ((unsigned int) time (NULL));

while (1)
{
getchar ();
printf ("%d\n", rand () % 101);
}

return 0;
}

Poi dimmi se ti sembra più valido o meno. ;)


Grazie mille, pensavo che bisognava farlo ogni volta che si richiamava la funzione random :)

La funzione random è una macro che ho inserito in stdlib

cionci
28-11-2005, 18:17
La funzione random è una macro che ho inserito in stdlib
Hai modificato un libreria standard ?!?!?!? Ma scherzi vero ?

17Qwerty71
29-11-2005, 22:38
Hai modificato un libreria standard ?!?!?!? Ma scherzi vero ?

Ah... era standard? :stordita: