su1206 2016-03-23 06:33 采纳率: 100%
浏览 2178
已采纳

关于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 2016-03-23 08: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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable