我需要我的程序来模拟能够改变 p 的伯努利 (p) 随机变量。如果我这样写
#include <random>
#include <iostream>
#include <chrono>
int main()
{
double prob = 0.1; //let it be const for now, no need to change it in this example
std::mt19937 gen(std::chrono::steady_clock::now().time_since_epoch().count());
std::bernoulli_distribution coin(prob);
int success = 0;
for (int i = 0; i < 1000; ++i) {
if (coin(prob)) ++success;
}
std::cout << success << "\n";
return 0;
}
它工作得很好。但是我需要更改参数 p,所以我决定创建一个函数,它需要一些切换器,根据切换器模拟带有参数的随机变量,并返回 true 或 false。这是我的代码:
#include <random>
#include <iostream>
#include <chrono>
bool coin_flip(int switcher) {
double prob;
switch (switcher) {
case 1: {
prob = 0.1;
std::mt19937 gen(std::chrono::steady_clock::now().time_since_epoch().count());
std::bernoulli_distribution coin(prob);
return coin(gen);
}
case 2: {
prob = 0.2;
std::mt19937 gen(std::chrono::steady_clock::now().time_since_epoch().count());
std::bernoulli_distribution coin(prob);
return coin(gen);
}
}
}
int main()
{
int success = 0;
for (int i = 0; i < 1000; ++i) {
if (coin_flip(1)) {
++success;
}
}
std::cout << success << "\n";
return 0;
}
主体中的 for 循环计算 1000 次尝试中的成功次数,我希望它在 100 左右,但我确实得到了奇怪的结果。太多的零和大数字。
所以我的问题是为什么 coin(prob) 在传递到函数的输出时会中断?
另外,如果您有好主意,我将不胜感激有关如何使用不同参数 p 模拟伯努利 rv 序列的任何建议(例如,我们处于一个循环中,其中 p 取决于计数器 i)
感谢您的时间