C++ 中的伯努利随机变量
Bernoulli random variables in c++
在 C++ 中获取伯努利分布随机变量的最简单方法是什么?我
我有一个非常量 p。
p 从 0 开始,得到 p+=0.01
,直到 p=1
。 ("for"循环)我有这样的想法:
声明 int 数组,大小为 100,用零填充。每次 p 得到 +0.01
时,我将一个零更改为“1”...并得到一个随机数 %100.
好看吗?
谢谢
你可以得到一个0到1之间的随机数,并从中计算出伯努利随机数
double p = 0.5;
double r = ((double) rand() / (RAND_MAX));
unsigned int br = 0;
if (r >= p)
br = 1;
您应该使用现代 C++(如果可能,C++11 或更高版本)。你可以这样做:
#include <random>
#include <iostream>
int main()
{
std::random_device rd{}; // use to seed the rng
std::mt19937 rng{rd()}; // rng
double p = 0.2; // probability
std::bernoulli_distribution d(p);
// generate 5 runs
for(std::size_t i = 0; i < 5; ++i)
std::cout << d(rng) << " ";
}
在 C++ 中获取伯努利分布随机变量的最简单方法是什么?我
我有一个非常量 p。
p 从 0 开始,得到 p+=0.01
,直到 p=1
。 ("for"循环)我有这样的想法:
声明 int 数组,大小为 100,用零填充。每次 p 得到 +0.01
时,我将一个零更改为“1”...并得到一个随机数 %100.
好看吗? 谢谢
你可以得到一个0到1之间的随机数,并从中计算出伯努利随机数
double p = 0.5;
double r = ((double) rand() / (RAND_MAX));
unsigned int br = 0;
if (r >= p)
br = 1;
您应该使用现代 C++(如果可能,C++11 或更高版本)。你可以这样做:
#include <random>
#include <iostream>
int main()
{
std::random_device rd{}; // use to seed the rng
std::mt19937 rng{rd()}; // rng
double p = 0.2; // probability
std::bernoulli_distribution d(p);
// generate 5 runs
for(std::size_t i = 0; i < 5; ++i)
std::cout << d(rng) << " ";
}