gpt4 book ai didi

c++ - rand() 生成相同的数字——即使在我的主目录中使用 srand(time(NULL)) !

转载 作者:IT老高 更新时间:2023-10-28 22:37:21 24 4
gpt4 key购买 nike

所以,我正在尝试创建一个随机 vector (想想几何,而不是可扩展数组),每次调用随机 vector 函数时,我都会得到相同的 x 值,尽管 y 和 z 不同。

int main () {
srand ( (unsigned)time(NULL));
Vector<double> a;
a.randvec();
cout << a << endl;
return 0;
}

使用函数

//random Vector
template <class T>
void Vector<T>::randvec()
{
const int min=-10, max=10;
int randx, randy, randz;

const int bucket_size = RAND_MAX/(max-min);

do randx = (rand()/bucket_size)+min;
while (randx <= min && randx >= max);
x = randx;

do randy = (rand()/bucket_size)+min;
while (randy <= min && randy >= max);
y = randy;

do randz = (rand()/bucket_size)+min;
while (randz <= min && randz >= max);
z = randz;
}

由于某种原因,randx 将始终返回 8,而其他数字似乎完全遵循(伪)随机性。但是,如果我在 randx 之前调用定义,比如说,randy,randy 将始终返回 8。

为什么我的第一个随机数总是 8?我是不是播错了?

最佳答案

问题是随机数生成器的种子值非常接近 - 程序的每次运行只会改变 time() 的返回值一小部分 - 可能是 1 秒,甚至可能没有!然后,相当差的标准随机数生成器使用这些相似的种子值来生成明显相同的初始随机数。基本上,你需要一个比 time() 更好的初始种子生成器和一个比 rand() 更好的随机数生成器。

我认为实际使用的循环算法是从 Accelerated C++ 提升而来的,其目的是在所需范围内产生比使用 ​​mod 运算符更好的数字分布。但它不能弥补总是(有效地)被给予相同的种子。

关于c++ - rand() 生成相同的数字——即使在我的主目录中使用 srand(time(NULL)) !,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3032726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com