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

Cof*_*ker 3 c++ random prng

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

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

Bil*_*ard 11

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

  • 虽然它是最明确的,但我认为它不一定(或有效)技术上准确.RNG具有状态,每次调用`rand`时它都会变为"next"状态,并从当前状态生成伪随机数. (4认同)