3

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

4

3 回答 3

5

srandom和family是glibc的成员。您可以将glibc 中的 srandom/random 源代码复制到您的应用程序中,只要它与许可证兼容。如果您正在寻找另一种实现方式,任何小额

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

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

正如 JWWalker 在评论中提到的那样,有一个非常好的提升随机实现,它C++为随机数提供了一组很好的类,但那是不同的语言,所以可能不直接适合C++C

于 2013-03-02T10:41:36.903 回答
1

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

编辑

一个更好的似乎是CryptGenRandom。检查此链接以获取详细信息。

于 2013-03-02T10:16:12.670 回答
1

如果您正在寻找一些简单的伪随机生成器,您可以使用线性同余生成器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;
}
于 2013-03-02T10:39:36.840 回答