0

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

PHP:

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

C:

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

为什么会这样?

4

1 回答 1

3

实现伪随机数生成器的方法不止一种。

每种编程语言都可以自由地指定自己的rand实现,甚至什么都不指定。例如,C 规范只说“该rand函数计算 0 到 0 范围内的伪随机整数序列RAND_MAX”。没有提到rand应该如何工作,所以编译器编写者可以随心所欲地实现rand

许多编译器使用线性同余生成器来实现rand. 即使是这个简单的算法也有编译器可以自由指定的参数,这些参数会改变特定种子给出的数字序列。

液晶参数

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

于 2013-01-29T14:29:44.663 回答