1

当我们需要一个随机数时,我们使用srand一次来初始化种子,之后我们可以使用rand. 为什么我们需要使用种子srand?例如srand(time(Null));,我们不能只使用rand() % 99999吗?我在这些功能的概念中遗漏了什么吗?

4

2 回答 2

2

事情是这样的,

您实际上不需要播种随机数生成器。来吧,试试吧!

但是,您将始终获得相同的“随机”数字序列。

像 rand() 这样的伪随机数生成器只生成看起来随机的序列。如果你每次都从“开始”开始,它们当然看起来是一样的。

播种生成器是获得实际“正确”随机出现的数字的好方法。如果您随时间播种,您将从序列中“随机”的某个地方开始。请注意,采摘时间值靠近通常会给出两个非常不同的序列。

你可以用任何你喜欢的种子播种。例如,如果您有很多线程使用大量生成器,那么时间不是一个好主意,因为多个线程的时间很可能是相同的。

种子没有明确的“好”值,因此默认情况下通常不会播种。如果您想“重新运行”具有完全相同输入的随机算法,这也是一件好事:只需将种子设置为相同的种子。

于 2013-10-16T20:16:32.930 回答
2

srand(0) 将始终返回相同的确定性值序列,尽管这些值看起来是随机的。

了解您的种子将使攻击者能够确定您生成的每个数字。

通过设置种子,您可以有效地创建不同的序列。

如果您只需要随机的外观,srand(0) 可能完全可以满足您的需求。

于 2013-10-16T16:26:29.973 回答