int random(){
double x = ((double) rand() / (RAND_MAX)); // this i tried but only 0
return x;
}
我是如何随机生成0或1的tic tac toe play
答案 0 :(得分:1)
如果您有C++11
,则可以使用新的标准<random>
库。特别是std::bernoulli_distribution分布提供了true
或false
个结果(默认可分别转换为1
和0
。
// 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
如果您始终需要1
或0
整数值而不是true
或false
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()
无法保证质量,并且实施起来可能很差。