¿Cómo implementar la generación de números aleatorios de Mersenne Twister en C?

Quiero usar una de las bibliotecas C de Mersenne Twister (por ejemplo, tinymt , mtwist o libbrahe), así que puedo usarla como semilla para rand() en un progtwig C. No pude encontrar un ejemplo minimalista simple sobre cómo hacer esto.

Llegué tan lejos con el paquete mtwist, pero a través de los comentarios de pjs me he dado cuenta de que esta es la forma incorrecta de hacerlo:

 #include  #include  #include "mtwist.h" int main() { uint32_t random_value; random_value = mt_lrand(); srand(random_value); printf("mtwist random: %d; rand: %d\n", random_value, rand()); return 0; } 

(Originalmente escribí que este código no se comstackría, pero gracias a la respuesta de Carl Norum, pude comstackrlo después de todo).

¿Alguien podría darme un ejemplo simple sobre cómo generar correctamente números aleatorios con cualquier biblioteca Mersenne Twister C?

Aquí hay una demostración de cómo usar la implementación mtwist de Mersenne Twister:

 #include  #include  #include "mtwist.h" int main(void) { int i; mt_seed(); for(i = 0; i < 10; ++i) { printf("%f\n", mt_ldrand()); } return EXIT_SUCCESS; } 

Comstackdo y ejecutado de la siguiente manera:

 [pjs@amber:mtwist-1.4]$ gcc run-mtwist.c mtwist.c [pjs@amber:mtwist-1.4]$ ./a.out 0.817330 0.510354 0.035416 0.625709 0.410711 0.980872 0.965528 0.444438 0.705342 0.368748 [pjs@amber:mtwist-1.4]$ 

Eso no es un error del comstackdor, es un error del enlazador. Le falta el indicador -l apropiado para vincular la biblioteca que está utilizando. La invocación de tu comstackdor debería verse como:

 cc -o example example.c -lmtwist 

Acabo de echar un vistazo rápido a la página mtwist a la que te vinculaste, y parece que se distribuye solo como fuente, no como una biblioteca. En ese caso, agregar el archivo de implementación apropiado a su línea de comando debería funcionar:

 cc -o example example.c mtwist.c 

Pero probablemente debería buscar una solución basada en la creación que construya una biblioteca real a partir del código mtwist.