Namespaces
Variants

std:: rand

From cppreference.net
Definido en el encabezado <cstdlib>
int rand ( ) ;

Devuelve un valor integral pseudoaleatorio del rango [ 0 , RAND_MAX ] .

std::srand() inicializa el generador de números pseudoaleatorios utilizado por rand() . Si rand() se utiliza antes de cualquier llamada a std::srand() , rand() se comporta como si hubiera sido inicializado con std:: srand ( 1 ) .

Cada vez que rand() se inicializa con std::srand() , debe producir la misma secuencia de valores en llamadas sucesivas.

Otras funciones en la biblioteca estándar pueden llamar a rand . Está definido por la implementación qué funciones lo hacen.

Es definido por la implementación si rand() es seguro para hilos.

Contenidos

Valor de retorno

Valor integral pseudoaleatorio entre 0 y RAND_MAX .

Notas

No hay garantías en cuanto a la calidad de la secuencia aleatoria producida. En el pasado, algunas implementaciones de rand() han tenido serias deficiencias en la aleatoriedad, distribución y período de la secuencia producida (en un ejemplo bien conocido, el bit de menor orden simplemente alternaba entre 1 y 0 entre llamadas).

rand() no se recomienda para necesidades serias de generación de números aleatorios. Se recomienda utilizar las facilidades de generación de números aleatorios de C++11 para reemplazar rand() . (desde C++11)

Ejemplo

La función bounded_rand() a continuación es una versión adaptada de Debiased Modulo (Once) .

#include <cstdlib>
#include <ctime>
#include <initializer_list>
#include <iostream>
unsigned bounded_rand(unsigned range)
{
    for (unsigned x, r;;)
        if (x = rand(), r = x % range, x - r <= -range)
            return r;
}
int main() 
{
    std::srand(std::time({})); // usar el tiempo actual como semilla para el generador aleatorio
    const int random_value = std::rand();
    std::cout << "Valor aleatorio en [0, " << RAND_MAX << "]: " << random_value << '\n';
    for (const unsigned sides : {2, 4, 6, 8})
    {
        std::cout << "Tirar dado de " << sides << " caras 8 veces: ";
        for (int n = 8; n; --n)
            std::cout << 1 + bounded_rand(sides) << ' ';
        std::cout << '\n';
    }
}

Posible salida:

Random value on [0, 2147483647]: 948298199
Roll 2-sided die 8 times: 2 2 1 2 1 1 2 2 
Roll 4-sided die 8 times: 1 3 4 2 1 3 3 1 
Roll 6-sided die 8 times: 3 2 1 6 6 4 4 2 
Roll 8-sided die 8 times: 4 5 6 6 3 6 1 2

Véase también

produce valores enteros distribuidos uniformemente en un rango
(class template)
inicializa el generador de números pseudoaleatorios
(function)
valor máximo posible generado por std::rand
(macro constant)
genera un entero aleatorio en el rango especificado
(function template)