繁体   English   中英

以相同方式播种的rand()产生不同的结果

[英]rand() seeded the same way generates different results

我正在用PHP和C开发应用程序,但是即使使用相同的种子,两种语言之间rand的结果也不同:

PHP:

srand(1);
$random = rand(); // returns 32422

C:

srand(1);
int random = rand(); // returns 41

为什么会这样呢?

实现伪随机数生成器有多种方法。

每种编程语言都可以自由指定其自己的rand实现,甚至不指定任何内容。 例如,C规范仅说“ rand函数计算范围为0到RAND_MAX的伪随机整数序列”。 没有提到rand应该如何工作,因此编译器作者可以按自己的rand实现rand

许多编译器使用线性同余生成器来实现rand 即使是这种简单的算法,也具有编译器可以自由指定的参数,并且可以更改由特定种子指定的数字顺序。

LCG参数

看看Borland和glibc如何使用不同的参数。 您甚至不能相信rand在所有C程序中都可以相同地工作,更不用说所有程序了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM