Red de conocimiento informático - Problemas con los teléfonos móviles - Versión C de la función rand

Versión C de la función rand

srand((unsigned)time(NULL)) utiliza el valor del temporizador/contador del sistema como semilla aleatoria. Cada semilla corresponde a un conjunto de números aleatorios pregenerados según el algoritmo, por lo que en el mismo entorno de plataforma, se obtendrán diferentes números aleatorios en diferentes momentos, si el tiempo srand (sin signo) (NULL) se cambia a srand (. TP) (TP es una constante arbitraria), entonces el "número aleatorio" obtenido por srand será una secuencia fija sin importar cuándo se ejecute o cuántas veces se ejecute. Por lo tanto, el número aleatorio generado por srand es un número pseudoaleatorio. .

La biblioteca proporciona dos funciones para generar números aleatorios: srand() y rand(). El prototipo de función es:

Función 1: int rand(void);

Devuelve un número entero aleatorio entre [0,RAND_MAX].

Función 2: void srand(semilla sin firmar);

El parámetro semilla es la semilla de rand() y se utiliza para inicializar el valor inicial de rand().

Sin embargo, cabe señalar que los llamados "números pseudoaleatorios" no son números aleatorios falsos. De hecho, los números aleatorios absolutos son solo un estado ideal de números aleatorios, y las computadoras solo pueden generar números relativamente aleatorios, es decir, números pseudoaleatorios. Los "números pseudoaleatorios" generados por las computadoras tienen aleatoriedad y regularidad: algunos siguen ciertas reglas y otros no siguen ninguna regla. Por ejemplo, "No hay dos hojas con la misma forma en el mundo." Ésta es la característica de las cosas: la diferencia; pero cada árbol tiene hojas con formas similares, que es la regla de las cosas. - Regularidad. Desde esta perspectiva, podemos aceptar el hecho de que las computadoras sólo pueden generar números pseudoaleatorios, pero no números absolutamente aleatorios.

Antes de llamar a rand(), el sistema llamará automáticamente a srand(). Si el usuario llama a srand() antes de llamar a rand() para asignar un valor al parámetro semilla, rand() usará el valor de semilla como valor inicial para generar números pseudoaleatorios si el usuario no llama a srand(); antes de llamar a rand (), el sistema establece de forma predeterminada 1 como valor inicial del número pseudoaleatorio. Si se proporciona un valor fijo, entonces la secuencia de números aleatorios generada por rand() será la misma cada vez ~~

Por lo tanto, para evitar la situación anterior, generalmente usamos srand((unsigned) time(0) ) o srand((unsigned)time(NULL)) para generar una semilla. Si el intervalo de tiempo aún es demasiado pequeño, multiplique el tiempo (sin signo) (0) o el tiempo (sin signo) (NULL) por algún número entero adecuado. Por ejemplo, srand((unsigned)time(NULL)*10)

Además, aproximadamente time_t time(0): time_t se define como un entero largo y devuelve 0:00 el 1 de enero de 1970 Cero segundos El tiempo transcurrido hasta el momento, en segundos.

Ejemplos de uso de srand() y rand(): #include#include#includevoid?main(){inti,j;srand ((int)tiempo( 0));for(i=0;i<10;i++){j=1+(int)(10.0*rand()/(RAND_MAX+1.0));printf("%d" ,j);}}