std:: rand
|
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
|
(C++11)
|
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) |
|
|
C documentation
para
rand
|
|