C 与POSIX srandom(…)和random()函数相当的Windows?
我正在尝试将一些代码从UNIX移植到Windows,我需要一个POSIXC 与POSIX srandom(…)和random()函数相当的Windows?,c,windows,posix,prng,C,Windows,Posix,Prng,我正在尝试将一些代码从UNIX移植到Windows,我需要一个POSIXsrandom(x)和random()函数的实现,这些函数对于给定的种子x,生成与符合POSIX.1-2001的相同的数字序列。Windows上的一些可用选项是什么?您可以在Windows中检查和操作。但是,我不确定它们是否符合POSIX标准 编辑 一个更好的似乎是。 查看此项了解详细信息。如果您正在寻找一些简单的伪随机生成器,您可以使用线性同余生成器 第一个例子: unsigned int seed = 2; unsig
srandom(x)
和random()
函数的实现,这些函数对于给定的种子x
,生成与符合POSIX.1-2001的相同的数字序列。Windows上的一些可用选项是什么?您可以在Windows中检查和操作。但是,我不确定它们是否符合POSIX标准
编辑
一个更好的似乎是。
查看此项了解详细信息。如果您正在寻找一些简单的伪随机生成器,您可以使用线性同余生成器 第一个例子:
unsigned int seed = 2;
unsigned int rand()
{
seed = 1664525 * seed + 1013904223;
return seed;
}
void srand(unsigned int new_seed)
{
seed = new_seed;
}
srandom
和家族是glibc的成员。您可能可以将srandom/random复制到您的应用程序中,只要它与许可证兼容。如果您正在寻找另一个实现,任何小的amou
请记住,POSIX实际上是接口一致性,而不是实现一致性——它实际上没有说明生成它的机制是什么,也没有说明生成的数字应该是什么
如果您希望在多个平台上保证相同的数字序列,那么您不应该依赖任何随机数生成器的标准库实现,您应该自己制作,或者回收已知的实现
正如JWWalker在一篇评论中提到的,有一个非常好的方法,它为随机数提供了一组很好的C++
类,但这是C++
,而不是C
——不同的语言,所以可能不直接适用
警惕未定义的行为!您可以使用
unsigned
代替UB来避免UB,因为这不会编译。x
变量是什么?@swdevx
必须是seed
。rand\u s
不使用srand
的种子集,并且rand
返回15位随机数,这与random
返回的31位随机数不同。对于开源随机数生成器,请参阅。链接已失效。我有一个需要编译的文件,我应该怎么做来替换srandom?@TomášZato我已经更新了glibc random.c指向sourceware链接的链接,该链接在可预见的未来应该仍然有效。它是glibc代码,并且具有与之关联的许可证,这可能使其不适合使用。