如何使用C 生成不相关的随机序列
how to generate uncorrelated random sequences using c++
我想生成两个不相关的正常分布式随机数x 1 ,x 2 。。
。由于正常的分布式随机数来自统一数字,我只需要两个不相关的统一序列。但是如何使用:
srand (time(NULL));
我想我需要播种两次或做类似的事情?
由于高质量随机数发电机生成的随机数是统一且独立的,因此您可以根据自己的意愿生成尽可能多的独立序列。
您不需要,不应种子两个不同的发电机。
在C (11)中,您应该使用标题<random>
的伪随机数生成器。这是一个最小的示例,可以用作实际实现的模板:
std::random_device seed;
std::mt19937 gen{seed()};
std::normal_distribution<> dist1{mean1, sd1};
std::normal_distribution<> dist2{mean2, sd2};
现在,您可以通过调用dist1(gen)
和dist2(gen)
生成独立的数字序列。random_device
用于播种实际发电机,在我的代码中是Mersenne Twister Generator。这种类型的发电机是有效的,具有良好的统计特性。它应被视为(非密码安全)发电机的默认选择。
rand
不支持生成多于单个序列。它将其状态存储在全球变量中。在某些系统(即符合POSIX的系统)上,您可以使用rand_r
保持接近该方法。您只需将一些初始种子用作每个种子的内部状态。但是,由于您的问题是标记为C ,我建议您使用C 11中引入的随机数设备。或者,如果不是C 11的选项,请使用Boost中的随机模块。
不久前,我问了一个类似的问题,多个线程的随机数,答案也可能对您有用。他们讨论了如何确保序列不相互关联的各个方面,或者至少不是以明显的方式。
使用<random>
中的normal_distribution
使用两个random_device
S(可能与某些使用引擎一起使用):
std::random_device rd1, rd2;
std::normal_distribution d;
double v1 = d(rd1);
double v2 = d(rd2);
...
另请参见http://en.cppreference.com/w/cpp/numeric/random/normal_distribution
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- std::less是否应该允许在编译时比较不相关的指针?
- 0 的 2D 数组 不相关循环的破坏逻辑 - C++
- 为什么数组到指针的输出不相关
- 如何使用模板元编程在自由函数C++链接两个不相关的类
- 为什么在使用不相关的宏时会阻止 while 循环结束?
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法
- 强制转换为不相关的引用类型是否违反严格的别名规则?
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- 尝试编写函数尝试从字符串中提取数字,但它返回不相关的数字
- VSCODE C++ IntelliSense为替代定义找到不相关的Yocto Sysroots
- 随机不工作 C 中的计数时间
- 什么保证两个不相关的线程中的不同不相关对象没有(不可避免的)争用条件?
- 对类型 'A *' 的非常量左值引用不能绑定到不相关的类型 'std::shared_ptr<A>' 的值
- 将函数从控制台应用程序移动到共享库项目似乎会带来不相关的编译错误
- 将不相关类型的对象reinterpret_cast空类是未定义的行为吗?
- 因为一行不相关的代码,速度相差那么大
- 如何使用C 生成不相关的随机序列
- 与C++2011不相关的并行随机种子