我在这里遇到一个奇怪的问题,我无法找到一个好的解释,所以我想问你们:
请考虑以下方法:
int MathUtility::randomize(int Min, int Max)
{
qsrand(QTime::currentTime().msec());
if (Min > Max)
{
int Temp = Min;
Min = Max;
Max = Temp;
}
return ((rand()%(Max-Min+1))+Min);
}
Run Code Online (Sandbox Code Playgroud)
我不会向大家解释这个方法实际上做了什么,我会解释我的问题:
我意识到,当我在循环中调用此方法时,有时候,我会一遍又一遍地得到相同的随机数...例如,这个片段......
for(int i=0; i<10; ++i)
{
int Index = MathUtility::randomize(0, 1000);
qDebug() << Index;
}
Run Code Online (Sandbox Code Playgroud)
...会产生类似的东西:
567 567 567 567 ...等......
我也意识到,如果我不是每次都调用qsrand,而是在我的应用程序的生命周期中只调用一次,那么它的工作正常...
我的问题:为什么?
Mic*_*ers 36
因为如果您randomize在一毫秒内调用多次(这很可能是当前CPU时钟速度),那么您将使用相同的值为RNG播种.这可以保证从RNG产生相同的输出.
随机数生成器仅用于播种一次.多次播种它们不会使输出额外的随机的,实际上(如你发现)可以使它更少随机的.
| 归档时间: |
|
| 查看次数: |
24889 次 |
| 最近记录: |