我想使用其中一个Mersenne Twister C库(例如tinymt,mtwist或libbrahe),这样我就可以将它用作rand()
的种子罢工>在C程序中。我无法找到关于如何做到这一点的简单简约示例。
我使用mtwist包得到了这一点,但通过pjs的评论,我意识到这是错误的方法:
#include <stdio.h>
#include <stdlib.h>
#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;
}
(原来我写过这段代码不能编译,但多亏了Carl Norum的回答,我能够完全编译它。)
有人能给我一个关于如何使用任何Mersenne Twister C库正确生成随机数的简单示例吗?
答案 0 :(得分:4)
以下是如何使用Mersenne Twister的mtwist
实现的演示:
#include <stdio.h>
#include <stdlib.h>
#include "mtwist.h"
int main(void) {
int i;
mt_seed();
for(i = 0; i < 10; ++i) {
printf("%f\n", mt_ldrand());
}
return EXIT_SUCCESS;
}
编译并运行如下:
[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]$
答案 1 :(得分:2)
这不是编译器错误,而是链接器错误。您错过了相应的-l
标记来链接您正在使用的库。您的编译器调用应该类似于:
cc -o example example.c -lmtwist
我只是快速浏览了您链接到的mtwist页面,它似乎只是作为源分发,而不是作为库分发。在这种情况下,将适当的实现文件添加到命令行应该可以:
cc -o example example.c mtwist.c
但是你可能应该研究一个基于make
的解决方案,用mtwist代码构建一个真正的库。