Namespaces
Variants

rand

From cppreference.net
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)