Estoy preguntando si hay una forma de aumentar la velocidad srand(time(NULL));
función "actualiza"? Entiendo que srand()
produce una nueva semilla según el tiempo (una vez por segundo), pero estoy buscando una alternativa a srand()
que pueda actualizarse con más frecuencia que intervalos de 1 segundo.
Cuando ejecuto mi programa, produce el resultado que se supone, pero la semilla permanece igual durante esencialmente un segundo, por lo que si el programa se ejecuta varias veces por segundo, el resultado permanece igual.
Perdón por una pregunta tan simple, pero no pude encontrar una respuesta específica para C en ninguna parte en línea.
Puede intentar obtener un valor inicial de alguna otra fuente. En un sistema Unix, por ejemplo, podría obtener un valor aleatorio de cuatro bytes de /dev/random:
void randomize() { uint32_t seed=0; FILE *devrnd = fopen("/dev/random","r"); fread(&seed, 4, 1, devrnd); fclose(devrnd); srand(seed); }
srand(time(NULL));
no es una función, son más bien dos funciones: time()
que devuelve el tiempo actual en segundos desde la época; y srand()
que inicializa la semilla del generador de números aleatorios. Está inicializando la semilla del generador de números aleatorios al tiempo actual en segundos, lo cual es bastante razonable.
Sin embargo, tiene varios conceptos erróneos, en realidad solo necesita ejecutar srand
una vez, o como máximo una vez cada pocos minutos, después de que rand()
continuará generando más números aleatorios por sí solo, srand()
es solo para establecer una semilla inicial para rand para empezar.
En segundo lugar, si realmente quiere hacer esto, aunque no veo por qué lo haría, podría usar una función que devuelva el tiempo a una mayor precisión. Yo sugeriría gettimeofday()
para este propósito.
En Windows, puede usar GetTickCount()
en lugar de time()
. Cambia en intervalos de 50 ms (si recuerda correctamente).