当我们需要随机数时,我们使用srand
一次初始化种子,之后我们可以使用rand
。为什么我们需要使用srand
种子?例如srand(time(Null));
我们不能只使用rand() % 99999
吗?我是否遗漏了这些功能的概念?
答案 0 :(得分:2)
srand(0)将始终返回相同的确定性序列值,但这些值将显示为随机。
了解种子将允许攻击者确定您生成的每个数字。
通过设置种子,您可以有效地创建不同的序列。
如果您只需要随机的外观,srand(0)可能完全可以满足您的需求。
答案 1 :(得分:2)
这就是事情,
您实际不需要为随机数生成器播种。来吧,不试试吧!
但是,你总会获得相同的“随机”数字序列。
诸如rand()的伪随机数生成器仅生成随机序列。如果你每次都从“开始”开始,它们当然看起来都一样。
播种生成器是获得实际上“正确”随机的数字的好方法。如果你随着时间而种子,你就会在序列中“随机”开始。请注意,拾取时间值靠近在一起通常会产生两个非常不同的序列。
你可以随心所欲地播种。例如,如果你有很多使用大量生成器的线程,那么时间是个坏主意,因为多个线程的时间可能相同。
种子没有明确的“好”值,因此默认情况下通常不会播种。如果您想要使用完全相同的输入“重新运行”随机算法,这也是一件好事:只需将种子设置为相同的种子。