[英]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
。 即使是这种简单的算法,也具有编译器可以自由指定的参数,并且可以更改由特定种子指定的数字顺序。
看看Borland和glibc如何使用不同的参数。 您甚至不能相信rand
在所有C程序中都可以相同地工作,更不用说所有程序了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.