rand
|
Definido en el encabezado
<stdlib.h>
|
||
|
int
rand
(
)
;
|
||
Devuelve un valor entero pseudoaleatorio entre
0
y
RAND_MAX
(
0
y
RAND_MAX
incluidos).
srand()
inicializa el generador de números pseudoaleatorios utilizado por
rand()
.
Si
rand()
se utiliza antes de cualquier llamada a
srand()
,
rand()
se comporta como si hubiera sido inicializado con
srand
(
1
)
.
Cada vez que
rand()
se inicializa con
srand()
, debe producir la misma secuencia de valores.
rand()
no está garantizado que sea seguro para hilos.
Contenidos |
Parámetros
(ninguno)
Valor de retorno
Valor entero pseudoaleatorio entre 0 y RAND_MAX , inclusive.
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, como criptografía.
POSIX requiere que el período del generador de números pseudoaleatorios utilizado por
rand
sea al menos
2
32
.
POSIX ofreció una versión segura para hilos de rand llamada
rand_r
, que está obsoleta en favor de la familia de funciones
drand48
.
Ejemplo
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); // usar el tiempo actual como semilla para el generador aleatorio int random_variable = rand(); printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable); // lanzar un dado de 6 caras 20 veces for (int n=0; n != 20; ++n) { int x = 7; while(x > 6) x = 1 + rand()/((RAND_MAX + 1u)/6); // Nota: 1+rand()%6 está sesgado printf("%d ", x); } }
Salida posible:
Random value on [0,2147483647]: 448749574 3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1
Referencias
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.22.2.1 La función rand (p: 252)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.22.2.1 La función rand (p: 346)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.20.2.1 La función rand (p: 312)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 4.10.2.1 La función rand
Véase también
|
inicializa el generador de números pseudoaleatorios
(función) |
|
|
valor máximo posible generado por
rand
(
)
(macro constante) |
|
|
Documentación de C++
para
rand
|
|