我正在用PHP和C开发一个应用程序但是rand
的结果在两种语言之间是不同的,即使我使用相同的种子:
PHP:
srand(1);
$random = rand(); // returns 32422
C:
srand(1);
int random = rand(); // returns 41
为什么会这样?
答案 0 :(得分:3)
实现伪随机数生成器的方法不止一种。
每种编程语言都可以自由指定自己的rand
实现,甚至不指定任何内容。例如,C规范只说“rand
函数计算0到RAND_MAX
范围内的伪随机整数序列。”没有提到rand
应该如何工作,所以编译器编写者可以实现rand
但是他们喜欢。
许多编译器使用linear congruential generator来实现rand
。即使这个简单的算法也有编译器可以自由指定的参数,它们会改变特定种子给出的数字序列。
看看Borland和glibc如何使用不同的参数。您甚至不能相信rand
在所有C程序中都可以这样做,更不用说所有程序了!