我用 C++ 编写了一个函数,它使用 time.h
中的系统时间作为种子,并返回两个指定值之间的伪随机数。
#include <time.h>
int randInt(int min, int max)
{
int nSeed = time(NULL);
int nRandom = nSeed * 13;
nRandom = nRandom % (max + 1);
nRandom += min;
return nRandom;
}
这个函数完全按照它应该做的去做(据我所知)。但是,当我重复调用该函数时,例如,当使用 for
循环用伪随机数填充数组时,几乎没有时间过去,因此种子是相同的,使得每个数字在数组中相同。我该如何解决这个问题?有没有办法从系统中获取更小精度的时间?还是我的做法完全错误?
最佳答案
您应该获得一个种子(例如时间)一次,然后通过重复应用阶跃函数生成多个值。否则,您的“PRNG”只是一个应用于种子生成的哈希函数,通常不是很随机。将种子与阶梯函数分开还允许确定性操作(固定种子)用于调试或可重现的结果。
关于c++ - 使用系统时间的随机数都一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20826876/