srand(time(NULL)) doesn't change seed value quick enough
我在C语言中编写了一个简单的随机数生成器。
它工作正常,但是我对播种有疑问。 如果我要循环运行此代码,则
我想知道其他人怎么可能解决这个问题。 我在网上找到的所有示例都使用
1 2 3 4 5 6 7 8 9 |
如果我要紧挨着运行这些代码行,则
说明:
PRNG(伪随机数生成器)根据所使用的算法生成确定性的数字序列。给定的算法将始终从给定的起点(种子)产生相同的序列。如果您未明确为PRNG设置种子,那么通常每次运行应用程序时,PRNG将从相同的默认种子开始,从而导致使用相同的数字序列。
要解决此问题,您需要在每次运行应用程序时为PRNG自己添加不同的种子(以提供不同的序列)。通常的方法是使用
每次需要新的随机数时,都无需为序列设定种子。我不确定这一点,但是我有一种感觉,根据所使用的PRNG算法,对每个新数字进行重新播种实际上可能会导致结果序列中的随机性降低。
主要开始时播种一次。如果您在同一秒内播种的速度太快,最终将得到相同的数字。
产生更多样化的随机集(在OSX 10.8上),包括在短周期测试中。
不要每次仅在程序开始时就对其进行播种。
另外,许多书籍建议不要使用C-lib标准随机函数。如果您需要良好的伪随机数,请在Press等人的《数字食谱》第三版中找到一个好的算法。版。
我假设您从另一个函数
如果在函数内部声明种子,则将重置该函数。重置功能,将使相同的数字出现几次,相同的秒。
将
如果您使用其他进程,请使用
我用它每秒测试多次带有随机值的相同程序(如果您输入rand编号,请退出该程序并再次快速运行,那么编号将相同)