1

我在 for 循环中迭代 perl 脚本并srand(time¦$$)在我的脚本中使用来播种随机数。

在我的输出中,如果我一次只做一个而不是使用 for 循环,当我得到单个结果时,我会得到重复的结果。是因为srand线吗?有什么建议么?

谢谢!

4

2 回答 2

14

使用相同号码的调用会srand导致以下rand调用返回相同的数字序列。因此,如果您srand(time() | $$)快速连续执行(例如,在同一秒内),那么您就是在这样做:srand使用相同的值调用会产生相同的序列rand

请参阅 perldoc 页面以srand.

文档还提到的一件事是,如果您在rand没有srand先调用的情况下调用,那么 Perl 实际上会srand为您调用。因此,您实际上并不需要srand首先在脚本中调用 to。

该文档还强烈建议不要对srand每个进程多次调用,因为这会导致熵损失。

于 2012-09-01T10:51:05.583 回答
3

不是 Perl 专家,但这肯定是由于循环的一次迭代快于 1 毫秒,因此使用相同的种子值多次调用 srand 函数。您应该在 for 循环之外初始化随机数生成器(或完全省略它);在循环内部,只需使用 rand。

于 2012-09-01T10:53:12.790 回答