我的理解是伪随机数生成器基本上只需要一些数字(种子),用一堆XOR和位移散列它,然后吐出一个非常长的数字,从中可以检索余数你的"随机"号。
现在,通常你会使用time(NULL)
作为C / C ++中rand()的种子。但是,time(NULL)
仅每秒递增一次,而不是每毫秒递增一次。那么,如果种子仍然是相同的rand()
值,那么如何在不到一秒钟内循环time(NULL)
一千次并且仍然可以得到不同的数字作为输出?
答案 0 :(得分:11)
rand()
使用先前的随机值作为后续调用的新种子。这就是当您以不同的种子值开始时将生成唯一的随机值序列的原因。
答案 1 :(得分:2)
伪数生成器输出一定范围内的一系列确定的数字,这些数字应该看起来是随机的。
time(NULL)
是RNG的所谓种子并告诉它,系列中的起始位置。你应该只对每个程序执行一次。
顺便说一下,rand()
不是现代C ++。请参阅here了解原因和做什么。
答案 2 :(得分:0)
C / C ++编译器通常使用linear congruential generator作为rand()。