我的理解是,伪随机数生成器基本上只是取一个数字(种子),对其进行一系列的异或和位移运算,然后输出一个非常长的数字,可以从中获取余数以得到您的“随机”数字。
通常情况下,在C/C++中使用
通常情况下,在C/C++中使用
time(NULL)
作为rand()的种子。但是,time(NULL)
仅每秒递增一次,而不是每毫秒。那么,如果种子仍为相同的time(NULL)
值,如何在不到一秒钟的时间内循环一千次rand()
并获得不同的输出数字?
rand()
之前,调用srand(time(NULL));
,你会发现输出结果在一秒钟内不会改变。这就是为什么通常只应该在程序开头初始化一次随机数生成器的原因。此外,C++11在<random>
头文件中添加了许多更好的随机数生成器。如果你的编译器支持,应该使用它们。 - Praetorian