【发布时间】:2015-11-23 10:52:15
【问题描述】:
我运行了一个名为rand() 的程序四次。我使用模数运算符将范围限制为 1-6。产生的整数是 2、5、4 和 2。我重新运行程序并得到相同的数字。然后我创建了一个全新的程序,也叫rand()四次,我仍然得到整数序列2、5、4、2。然后我关闭计算机,重新启动,创建另一个名为@987654325的新程序@ 4 次,仍然得到序列 2、5、4、2。
我了解使用srand()“播种”RNG 所需的基本知识,它在不同的点开始序列,但我只是好奇:暂时忘记播种,是由@987654327 生成的序列@ 安装、编译器和/或操作系统相关?例如,以下任何一项是否会导致不同的序列:
- 在我的计算机上卸载并重新安装 C 编译器
- 在我的计算机上安装和使用不同的 C 编译器
- 在其他人的计算机上使用相同的编译器运行程序?
- 在其他人的计算机上使用不同的编译器(可能还有不同的操作系统)运行程序?
还是只是所有 C 编译器都使用相同的 RNG 算法,所以每个人的伪随机序列(从头开始)都是一样的?
【问题讨论】:
-
为什么不直接咨询C standard
-
@Olaf 因为我的问题没有具体直接地由规范解决,因此很难推断出答案——尤其是对于初学者而言。也因为这个网站上至少有一些善良的人理解初学者并愿意提供帮助。
-
我发布的标准链接完全回答了。请继续阅读
srand关于可重复性的内容。至于生成相同的序列:标准是否强制执行特定的算法?请注意,链接不仅仅是一个规范,而是国际标准(嗯,最终草案,但没有显着差异;标准是废话)。