gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:07 24 4
gpt4 key购买 nike

我正在用 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

许多编译器使用 linear congruential generator实现rand。即使是这个简单的算法也有编译器可以自由指定的参数,这些参数会改变特定种子给出的数字序列。

LCG parameters

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

关于php - 以相同方式播种的 rand() 会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com