¿Qué significa rango rand ()% + menor? [cerrado]
Estoy aprendiendo C en este momento y no entiendo qué significa rand() % range + lower
en esta línea de código.
printf("I will generate 10 random numbers between %d and %d . . .\n", lower, upper);
int range = upper - lower+1;
for(int i = 0; i <= 10; i++) {
int number = rand() % range + lower;
printf("%d\t", number);
Respuestas
Este es un generador aleatorio lineal de un pobre.
De hecho, es aleatorio porque se alimenta del rand()
que devuelve un entero aleatorio, y por construcción el valor es> = inferior y <= superior.
Pero sigue siendo una herramienta pobre porque los valores en el intervalo [inferior, superior] pueden tener diferentes probabilidades.
En pocas palabras, se puede usar si solo necesita algunos valores aleatorios, pero no debería serlo si necesita una fuente aleatoria segura criptográfica.
Lea acerca del operador%. Es una división de módulo. La división de módulo es una buena herramienta para unificar el mapeo del rango más grande al rango más corto (en su caso, rango rand ()% ). Solo necesita agregar el inicio del rango para cambiar todos los valores a las posiciones correctas. Code rand ()% range + lower es el modismo estándar de C para obtener números aleatorios del rango A, B. Puede encontrar más expresiones idiomáticas, por ejemplo, para números de coma flotante con rango (A, B) o rango <A, B>.