生成0或1而不是之间

时间:2017-09-17 11:05:09

标签: c++ random

int random(){
    double x = ((double) rand() / (RAND_MAX)); // this i tried but only 0
    return x;
} 

我是如何随机生成0或1的tic tac toe play

1 个答案:

答案 0 :(得分:1)

如果您有C++11,则可以使用新的标准<random>库。特别是std::bernoulli_distribution分布提供了truefalse个结果(默认可分别转换为10

// returns true or false
bool randomly_true(double p = 0.5)
{
    thread_local static std::mt19937 mt{std::random_device{}()};
    thread_local static std::bernoulli_distribution d;
    return d(mt, std::bernoulli_distribution::param_type{p});
}

int main()
{
    for(int i = 0; i < 30; ++i)
        std::cout << randomly_true() << '\n';
}

输出:(样本)

0
0
0
1
0
1
1
1
0
1

如果您始终需要10整数值而不是truefalse bool值,则可以通过从函数返回int来强制转换:

// returns 1 or 0
int randomly_true(double p = 0.5)
{
    thread_local static std::mt19937 mt{std::random_device{}()};
    thread_local static std::bernoulli_distribution d;
    return d(mt, std::bernoulli_distribution::param_type{p});
}

注意:您应该优先使用此库rand(),因为rand()无法保证质量,并且实施起来可能很差。