How to Generate a Random Number Between 0 and 1 in C++

Use C++11
<random>
Library to Generate a Random Number Between 0 and 1 
Use
std::rand
Function to Generate a Random Float Between 0 and 1 in C++
This article explains several C++ methods on how you can generate a random float in 0 to 1 interval.
Use C++11 <random>
Library to Generate a Random Number Between 0 and 1
The C++11 version provides classes/methods for random and pseudorandom number generation. These standard library facilities are recommended for handling random number generation in the modern C++ codebase.
std::random_device
object is initialized first; it’s a nondeterministic uniform random bit generator used to seed the random number engine std::default_random_engine
, which is initialized on the next line. This way it’s ensured that the engine won’t produce the same number sequences.
There are several random number engines that are implemented in the C++ <random>
library, and they differ in a few factors like time/space requirements (see the full list here). In the following example below, we demonstrate random float generation using std::default_random_engine
. We can specify a certain algorithm engine as required by the application constraints. The next step is we initialize a uniform distribution and pass min/max values as arguments. Finally, we print 5 random float values in [01] interval to the console.
#include <iostream>
#include <random>
#include <iomanip>
using std::cout;
using std::endl;
using std::setprecision;
constexpr int FLOAT_MIN = 0;
constexpr int FLOAT_MAX = 1;
int main()
{
std::random_device rd;
std::default_random_engine eng(rd());
std::uniform_real_distribution<float> distr(FLOAT_MIN, FLOAT_MAX);
for (int n = 0; n < 5; ++n) {
cout << setprecision(6)
<< distr(eng) << "\n";
}
return EXIT_SUCCESS;
}
Output:
0.22808
0.343274
0.408204
0.687902
0.572947
Note that std::uniform_real_distribution< T >
yields undefined behavior if one of the following types is not passed as a template parameter: float
, double
, or long double
to.
Use std::rand
Function to Generate a Random Float Between 0 and 1 in C++
rand
function is a part of the C standard library random number generation facilities. It’s not recommended for applications requiring highquality randomness. Still, it can be utilized for testing purposes or cryptographically nonsensitive number generation.
rand
function generates a pseudorandom integer between 0 and RAND_MAX
(both included). Since the RAND_MAX
value is implementationdependent, and the guaranteed minimum value is only 32767, generated numbers have constrained randomness. Keep in mind that this function must be seeded with std::srand
(preferably passing the current time using std::time
). Finally, we can generate floatingpoint values in the interval of [01].
#include <iostream>
#include <random>
#include <iomanip>
using std::cout;
using std::endl;
using std::setprecision;
constexpr int FLOAT_MIN = 0;
constexpr int FLOAT_MAX = 1;
int main()
{
std::srand(std::time(nullptr));
for (int i = 0; i < 5; i++)
cout << setprecision(6)
<< FLOAT_MIN + (float)(rand()) / ((float)(RAND_MAX/(FLOAT_MAX  FLOAT_MIN)))
<< endl;
return EXIT_SUCCESS;
}
Output:
0.483029
0.252537
0.264023
0.90233
0.573071