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_MAX es una constante definida en <cstdlib> que representa el valor máximo que puede generar rand(). 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:

  1. Se incluye la biblioteca <cstdlib> para acceder a las funciones rand() y srand().
  2. La función srand() se utiliza para sembrar el generador de números aleatorios con la hora actual obtenida mediante time(NULL). Esto genera una secuencia de números aleatorios diferente cada vez que se ejecuta el programa.
  3. Un bucle for se ejecuta 10 veces.
  4. Dentro del bucle, se genera un número aleatorio entre 0 y 99 utilizando el operador módulo (%).
  5. 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:

  1. Este ejemplo utiliza una semilla específica (12345) para generar una secuencia de números aleatorios predecible.
  2. El bucle genera 10 números aleatorios.
  3. La fórmula rand() % (20 - 10 + 1) + 10 genera 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.
  4. 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

Entradas más populares de este blog

Paso de parámetros en funciones

STL de C++