无法理解为什么我需要使用srand种子

时间:2013-10-16 16:18:43

标签: random srand

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

2 个答案:

答案 0 :(得分:2)

srand(0)将始终返回相同的确定性序列值,但这些值将显示为随机。

了解种子将允许攻击者确定您生成的每个数字。

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

如果您只需要随机的外观,

srand(0)可能完全可以满足您的需求。

答案 1 :(得分:2)

这就是事情,

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

但是,你总会获得相同的“随机”数字序列。

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

播种生成器是获得实际上“正确”随机的数字的好方法。如果你随着时间而种子,你就会在序列中“随机”开始。请注意,拾取时间值靠近在一起通常会产生两个非常不同的序列。

你可以随心所欲地播种。例如,如果你有很多使用大量生成器的线程,那么时间是个坏主意,因为多个线程的时间可能相同。

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