Generación de números aleatorios
Generación de números aleatorios en C++
En C++, la generación de números aleatorios se realiza principalmente mediante la biblioteca estándar <cstdlib>. Esta biblioteca proporciona dos funciones esenciales para este propósito:
1. Función rand():
- Genera números enteros aleatorios pseudoaleatorios en el rango
[0, RAND_MAX]. RAND_MAXes una constante definida en<cstdlib>que representa el valor máximo que puede generarrand(). Su valor suele ser 32767 o 2147483647, dependiendo de la implementación.
2. Función srand():
- Siembra el generador de números aleatorios con un valor inicial, también conocido como "semilla".
- Afecta la secuencia de números aleatorios generados por
rand(). - Si se utiliza la misma semilla, la secuencia de números aleatorios será la misma cada vez que se ejecute el programa.
Ejemplo básico:
C++
#include <cstdlib>
int main() {
// Siembra el generador de números aleatorios con la hora actual
srand(time(NULL));
// Genera 10 números aleatorios entre 0 y 99
for (int i = 0; i < 10; ++i) {
int numeroAleatorio = rand() % 100;
std::cout << numeroAleatorio << " ";
}
return 0;
}
Explicación:
- Se incluye la biblioteca
<cstdlib>para acceder a las funcionesrand()ysrand(). - La función
srand()se utiliza para sembrar el generador de números aleatorios con la hora actual obtenida mediantetime(NULL). Esto genera una secuencia de números aleatorios diferente cada vez que se ejecuta el programa. - Un bucle
forse ejecuta 10 veces. - Dentro del bucle, se genera un número aleatorio entre 0 y 99 utilizando el operador módulo (
%). - El número aleatorio generado se imprime en la consola.
Ejemplo avanzado:
C++
#include <cstdlib>
#include <iostream>
int main() {
// Siembra el generador de números aleatorios con un valor específico
srand(12345);
// Genera números aleatorios entre 10 y 20 (incluidos)
for (int i = 0; i < 10; ++i) {
int numeroAleatorio = rand() % (20 - 10 + 1) + 10;
std::cout << numeroAleatorio << " ";
}
return 0;
}
Explicación:
- Este ejemplo utiliza una semilla específica (
12345) para generar una secuencia de números aleatorios predecible. - El bucle genera 10 números aleatorios.
- La fórmula
rand() % (20 - 10 + 1) + 10genera números aleatorios entre 10 y 20. Veamos cómo funciona:20 - 10 + 1: Calcula el rango (10).rand() % 10: Genera un número aleatorio entre 0 y 9 (dentro del rango).+ 10: Suma 10 al resultado para obtener un número entre 10 y 20.
- Generalizando. Si tomamos min como el valor mínimo y max como el valor máximo del rango que deseamos la formula quedaría así:
rand() % (max - min + 1) + min
Recuerda:
- La generación de números aleatorios en C++ es pseudoaleatoria, lo que significa que la secuencia de números aleatorios parece aleatoria, pero en realidad es determinista y se puede reproducir si se utiliza la misma semilla.
- Para aplicaciones que requieren una aleatoriedad real, se recomiendan bibliotecas especializadas como Mersenne twister o Xorshift star.
Comentarios
Publicar un comentario