生成[0,1)c ++之间的随机数

Joh*_*ohn 1 c++ random

我正在尝试生成一个在[0,1)之间均匀分布的随机数,我尝试过uniform_real_distribution但我不确切知道它是如何工作的.我在下面有这个代码,但它每次都会产生接近相同的数字〜.456

void RandomNumber()
{
srand(time(0));
double number=(double)rand()/((double)RAND_MAX+1);
cout<<"RANDOM NUMBER: "<<number<<endl;
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*ang 5

您每次生成随机数时都会重置随机生成器的种子,这意味着如果您尝试在短时间内重复生成数字,您可能会得到相同的结果,因为std::time()它只在一秒钟内准确.

你应该std::srand()在程序开始时调用一次,或者更好的是,使用a std::uniform_real_distribution.如果你感到困惑的是如何<random>图书馆工作,看看这个.


Gab*_*iel 5

  1. 不要使用 rand,它是一个糟糕的随机数生成器

  2. 每次调用生成器时不要重置种子

  3. 使用 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) << ' ';
    }
    
    Run Code Online (Sandbox Code Playgroud)