C / C ++的rand()如何快速生成随机数?

时间:2014-06-24 18:25:23

标签: c++ random prng

我的理解是伪随机数生成器基本上只需要一些数字(种子),用一堆XOR和位移散列它,然后吐出一个非常长的数字,从中可以检索余数你的"随机"号。

现在,通常你会使用time(NULL)作为C / C ++中rand()的种子。但是,time(NULL)仅每秒递增一次,而不是每毫秒递增一次。那么,如果种子仍然是相同的rand()值,那么如何在不到一秒钟内循环time(NULL)一千次并且仍然可以得到不同的数字作为输出?

3 个答案:

答案 0 :(得分:11)

rand()使用先前的随机值作为后续调用的新种子。这就是当您以不同的种子值开始时将生成唯一的随机值序列的原因。

答案 1 :(得分:2)

伪数生成器输出一定范围内的一系列确定的数字,这些数字应该看起来是随机的。

time(NULL)是RNG的所谓种子并告诉它,系列中的起始位置。你应该只对每个程序执行一次。

顺便说一下,rand()不是现代C ++。请参阅here了解原因和做什么。

答案 2 :(得分:0)

C / C ++编译器通常使用linear congruential generator作为rand()。