2 u014767385 u014767385 于 2016.03.23 14:33 提问

关于C++中伯努利分布bernoulli_distribution的使用,求助!

如题,我是有一个double prob,作为伯努利分布的p值。
每次如果bool值是true,就是succeed;反之则不是。
函数如下。

 bool ifSucceed(double prob)
{
    default_random_engine generator;
    bernoulli_distribution b(prob);
    return b(generator);
}


调用时:

 for (int i = 0; i < n - 1; ++i)
    {
        if (ifSucceed(cSetx[i].probFailure))
        {
            cout << i<<": Twice Delivery" << endl;
            totalDist += 3*getDist(cSetx[i], cSetx[i + 1]);
        }
        else
        {
            totalDist += getDist(cSetx[i], cSetx[i + 1]);
            //cout << "TotalDist: " << totalDist << endl;
        }

但是试验了几次,都没有出现succeed的情况。
就算把部分概率改为1,那一部分也不一定能出现succeed,这显然是不合理的。

请各位赐教!谢谢!

1个回答

Dennis_Zip
Dennis_Zip   2016.03.23 16:17
已采纳

generator和b应该放在循环的外面,在固定设置一个概率值后,打印循环调用伯努利分布的结果值,例如:

std::default_random_engine generator;
std::bernoulli_distribution distribution(0.5);
int count=0;

for (int i=0; i<10000; ++i)
if (distribution(generator)) ++count;
std::cout << "true: " << count << std::endl;
std::cout << "false: " << nrolls-count << std::endl;
-------------------结果----------------------
true: 4994
false: 5006

u014767385
u014767385 我的for循环里每一次概率值是不一样的,我在问题描述里加入了后面的代码,能麻烦您再看看么
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!