Windows等效的POSIX srandom(...)和random()函数?

时间:2013-03-02 10:08:20

标签: c windows posix prng

我正在尝试将一些代码从UNIX移植到Windows,我需要实现POSIX srandom(x)random()函数,对于给定的种子x生成与符合POSIX.1-2001的序列号相同的序列号。 Windows上有哪些可用选项?

3 个答案:

答案 0 :(得分:5)

srandom和家人是glibc的成员。您可以将the source code from glibc用于srandom / random复制到您的应用程序中,只要它的许可证兼容即可。如果你正在寻找另一个实现,任何小的amou

请记住,POSIX实际上是接口一致性,而不是实现一致性 - 它实际上并没有说明生成它的机制是什么,也不是结果数字应该是什么。

如果您希望在多个平台上保证相同的数字序列,那么您不应该依赖任何随机数生成器的标准库实现,您应该自己创建或回收已知的实现。< / p>

  

正如JWWalker的评论中提到的,有一个非常好的boost random implementation,它为随机数提供了一组很好的C++类,但那是C++,而不是C } - 不同的语言,所以可能不直接适合。

答案 1 :(得分:1)

您可以在Windows中查看rand_ssrand功能。但是,我不确定它们是否符合POSIX标准。

修改

一个更好的似乎是CryptGenRandom。 有关详细信息,请查看此link

答案 2 :(得分:0)

如果您正在寻找一些简单的伪随机生成器,您可以使用线性同余生成器http://en.wikipedia.org/wiki/Linear_congruential_generator

例如。第一个例子:

unsigned int seed = 2;

unsigned int rand()
{
   seed = 1664525 * seed + 1013904223;
   return seed;
}

void srand(unsigned int new_seed)
{
   seed = new_seed;
}