代码之家  ›  专栏  ›  技术社区  ›  Jake Petroules

如何使用C rand()函数生成概率为p的布尔值?

  •  9
  • Jake Petroules  · 技术社区  · 14 年前

    如何生成概率为的随机布尔值 p rand() 功能?

    bool nextBool(double probability)
    {
        return ...
    }
    
    3 回复  |  直到 14 年前
        1
  •  11
  •   leemes    12 年前
    bool nextBool(double probability)
    {
        return (rand() / (double)RAND_MAX) < probability;
    }
    

    或者(在看到其他回应后)

    bool nextBool(double probability)
    {
        return rand() <  probability * ((double)RAND_MAX + 1.0);
    }
    
        2
  •  1
  •   Oliver Charlesworth    14 年前

    你的意思是生成一个随机变量,使得p(1)=p和p(0)=(1-p)?

    如果是,比较 rand() p*RAND_MAX .

        3
  •  0
  •   Community CDub    8 年前

    bool nextBool(double probability)
    {
        double p_scaled = probability * (RAND_MAX+1) - rand();
        if ( p_scaled >= 1 ) return true;
        if ( p_scaled <= 0 ) return false;
        return random_bool( p_scaled );
    }
    

    注意,虽然函数是递归的,

    1. 递归调用的概率为 1.0/RAND_MAX
    2. 它必须是递归的或以其他方式调用 rand() probability 不同于 最大值1.0/兰特 .

    this 问题。