c++ - 使用系统时间的随机数都一样

标签 c++ random

我用 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/

相关文章:

python - 从文本文件中随机选择句子,找到对应的ID号

php - 长度为 15 个字符且为正数的随机数

python - 为小 k(<=5) 从 k 明智的独立散列族生成散列函数的最快方法

c++ - 创建自定义 boost 序列化输出存档

c++ - 计算空格以获得字数

c++ - 确定大于 4GB 的文件的大小

unix - 在 unix shell 中生成随机文件名

c++ - 使用 Doxygen 单独提取类的公共(public)方法列表

c++ - 使用命名空间的多重定义错误

python-3.x - 如何在并行化随机种子实验时确保可重复性?