我试图生成一个在[0,1)之间均匀分布的随机数,我尝试过uniform_real_distribution,但我并不确切知道它是如何工作的。我在下面有这个代码,但它每次都会产生接近相同的数字〜.456
void RandomNumber()
{
srand(time(0));
double number=(double)rand()/((double)RAND_MAX+1);
cout<<"RANDOM NUMBER: "<<number<<endl;
}
答案 0 :(得分:5)
每次生成随机数时都会重置随机生成器的种子,这意味着如果您尝试在短时间内重复生成数字,则可能会得到相同的结果,因为std::time()
只是准确到一秒钟。
您应该在程序开始时调用std::srand()
一次,或者更好的是,使用std::uniform_real_distribution
。如果您对<random>
库的工作原理感到困惑,请查看this。
答案 1 :(得分:2)
不要使用rand,它是一个糟糕的随机数生成器
每次调用生成器时都不要重置种子
使用C ++ 11。阅读更清晰,便携且易于维护
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(0, 1);//uniform distribution between 0 and 1
for (int n = 0; n < 10; ++n) {
std::cout << dis(gen) << ' ';
}