我试图将一些代码从UNIX移植到Windows,我需要一个POSIX srandom(x)
和random()
函数的实现,对于给定的种子x
,生成与符合POSIX .1-2001。 Windows上有哪些可用的选项?
srandom
和家庭是glibc的成员。 只要是兼容的许可证,您可以将源代码从 sibm / random的glibc复制到您的应用程序中。 如果你正在寻找另一个实现,任何小amou
请记住,POSIX实际上是接口一致性,而不是实现一致性 – 它实际上没有说明生成它的机制是什么,也不是实际产生的数字。
如果您希望保证跨多个平台的序列号相同,那么您不应该依赖任何随机数生成器的标准库实现,您应该自己制作,或者回收一个已知的实现。
正如JWWalker在评论中提到的那样,有一个相当不错的提升随机实现 ,它为随机数提供了一组很好的
C++
类,但这是C++
,而不是C
语言,因此可能不是直接适用的。
您可以在Windows中检查rand_s和srand函数。 但是,我不确定它们是否符合POSIX标准。
编辑
一个更好的似乎是CryptGenRandom 。 查看这个链接的细节。
如果你正在寻找一些简单的伪随机生成器,你可以使用线性同余生成器http://en.wikipedia.org/wiki/Linear_congruential_generator
例如。 第一个例子:
unsigned int seed = 2; unsigned int rand() { seed = 1664525 * seed + 1013904223; return x; } void srand(unsigned int new_seed) { seed = new_seed; }