Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 与POSIX srandom(…)和random()函数相当的Windows?_C_Windows_Posix_Prng - Fatal编程技术网

C 与POSIX srandom(…)和random()函数相当的Windows?

C 与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

我正在尝试将一些代码从UNIX移植到Windows,我需要一个POSIX
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
变量是什么?@swdev
x
必须是
seed
rand\u s
不使用
srand
的种子集,并且
rand
返回15位随机数,这与
random
返回的31位随机数不同。对于开源随机数生成器,请参阅。链接已失效。我有一个需要编译的文件,我应该怎么做来替换srandom?@TomášZato我已经更新了glibc random.c指向sourceware链接的链接,该链接在可预见的未来应该仍然有效。它是glibc代码,并且具有与之关联的许可证,这可能使其不适合使用。