Números aleatorios en C de linux

¿Cómo genero números aleatorios en C de linux?. Utilizo la función random() y srandom y me arroja siempre el mismo valor!.

2 respuestas

Respuesta
1
Deberías leer el manual acerca de la función "random(3)":
[linux] $ man random
_ _ _ _ _ _
RANDOM(3) Manual del Programador de Linux RANDOM(3)
NOMBRE
random, srandom, initstate, setstate - generador de
números aleatorios.
SINOPSIS
#include <stdlib.h>
long int random(void);
void srandom(unsigned int semilla);
char *initstate(unsigned int semilla, char *estado, int n);
char *setstate(char *estado);
DESCRIPCIÓN
La función random() emplea un generador no lineal aditivo
con retroalimentación de números aleatorios utilizando una
tabla predeterminada de 31 enteros largos para devolver
números pseudo-aleatorios sucesivos en el rango de 0 a
RAND_MAX. El periodo de este generador de números aleato­
rios es muy grande, aproximadamente 16*((2**31)-1).
_ _ _ _ _ _
Te falta (por lo que sospecho) inicializar la función "drand48()",
con una semilla, eso se hace con la función "srand48()", si usas la
misma semilla siempre, vas a obtener la misma secuencia de números
aleatorios, por lo que es mejor usar la hora actual (hora/min/seg),
como semilla, así siempre serán secuencias diferentes de números
aleatorios (o pseudo-aleatorios para ser más precisos!):
[linux] $ man drand48
En ultimas, deberias hacer algo muy parecido a esto:
_ _ _ _ _ _
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main() {
time_t tiempo;
double aleatorio; /* defino la variable */
tiempo = time((time_t *)0); /* 0 = ahora */
srand48(tiempo); /* inicializacion */
aleatorio = drand48();
printf ("%12.6f\n", aleatorio);
}
_ _ _ _ _ _
Hoy, "drand48" y compañía son consideradas obsoletas, recomiendan
el uso de "rand", pero creo que deberías evaluar los resultados de
las distintas funciones y verificar cual se distribuye de acuerdo a
tus necesidades.
[linux] $ man 3 rand
Respuesta
1
Las funciones generen un numero aleatorio según la semilla el problema cuando utilizas ramdon y srandom es que debes inicializar la semilla para la función random la semilla se genera con la instrucción ramdonmize() y para srandom srand(struct time )

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas