gpt4 book ai didi

c++ - rand() 在通过仿函数调用时生成相同的随机数集(即使在使用 srand(time(NULL)) 播种后)

转载 作者:行者123 更新时间:2023-11-28 07:11:19 26 4
gpt4 key购买 nike

我在生成随机数时遇到问题,我已经通读了关于 SO 的大多数帖子,但似乎没有一个解决方案有效。请在将其标记为重复之前通读它

我有一个仿函数来生成 0.5 到 -0.5 之间的随机数:

struct randomize
{
__host__ void operator()( double &x ) const {
x=(double) (rand() % 1000000) / 1000000 - 0.5;
}
};

我通过 for_each 调用它,如下所示:

thrust::for_each(myVector.begin(),myVector.end(),randomize());

它又在类的构造函数中被调用(假设是 myClass),它被称为:

myObjs=std::vector<myClass>(20,myClass(no_of_inputs));

问题是所有 myClass' 对象中的所有 myVector 都填充了同一组值。这些值随每次运行而变化,但在所有 myVectors`

中都是相同的

我知道 rand() 是一个伪随机数生成器,它生成的数字不能指望是真正随机的。但是这太巧合了。

澄清一下:

  • 我在整个程序中只调用了一次 srand(time(NULL))
  • 我使用的是 thrust::for_each 而不是 std::for_each 但这应该不会有太大区别
  • 我知道随机仿函数远非完美,但我正在修改并除以 1000000 以获得小数点后的 6 位数字。如果您能指出更好的方法,那就太好了,但请不要被它冲昏头脑。
  • 我不能使用 c++11(目前)或 boost(根本)
  • 我不能为 myClass 使用默认构造函数
  • 我将不胜感激不需要我过多更改代码结构的解决方案

最佳答案

myObjs=std::vector<myClass>(20,myClass(no_of_inputs));

你为myClass定义了一个复制构造函数吗?随机化数据? (然而,在我看来,这违背了复制构造函数的目的)

如果不是,那么您正在复制相同的 myClass 20次入myObjvector<myClass>将通过调用每个元素的默认复制构造函数来构造,这反过来将简单地复制 myVector 中的数据。 .

关于c++ - rand() 在通过仿函数调用时生成相同的随机数集(即使在使用 srand(time(NULL)) 播种后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20923551/

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