stdlib的rand()总是给出相同的序列吗?

Joe*_*Joe 6 c random std

我非常希望能够重复生成相同的伪随机数据集,特别是在调整实验代码时.通过观察我会说,rand()每次*似乎给出相同的数字序列.

是否可以保证在同一台机器/不同机器/不同架构上重复执行?

*明显对于同一种子.

ken*_*ytm 20

是的,给予该计划相同的环境.根据C标准§7.20.2.2/ 2,

srand函数使用该参数作为后续调用返回的新伪随机数序列的种子rand.如果srand随后使用相同的种子值调用,则应重复伪随机数序列.如果rand在进行任何调用之前调用srand,则应生成与srand第一次调用种子值为1 时相同的序列.

当然,这假设它使用相同的实现细节(即相同的机器,同一个库在同一执行期).C标准并没有规定一个标准的随机数生成算法,因此,如果您用一个不同的C标准库的程序,可以得到不同的随机数序列.

如果您需要具有给定种子的可移植且保证随机数序列,请参阅跨平台的一致伪随机数问题.

  • 它不会延伸到不同版本的运行时 - 如果你动态链接到`rand()`的实现,它可能会在不重建任何东西的情况下采取不同的行动. (3认同)