This template in C++ is used to convert the value generated by g into a floating point value in the range [0, 1) preserving the uniformity properties of sequences generated with g. To generate enough entropy generate_canonical() will call g() exactly 'k' times where,
k = max(1, \lceil \frac{b}{log_2 R} \rceil)
Syntax:
CPP
template ( class RealType, size_t bits, class URNG ) RealType generate_canonical (URNG& g);Template parameters: This template accepts three parameters as mentioned above and described below:
- RealType: The function returns a value of floating point type.
- bits: Maximum number of bits in the mantissa.
- URNG: A uniform random number generator class.
// C++ program to illustrate generate_canonical()
// function.
#include <bits/stdc++.h>
using namespace std;
int main()
{
// Obtain a root from the system clock:
unsigned root = chrono::system_clock::now().time_since_epoch().count();
// Random number engine class
// that generates pseudo-random numbers
default_random_engine generator(root);
double can_val = generate_canonical<double,
numeric_limits<double>::digits>(generator);
// Print the random canonical value
// It will display different value everytime
cout << "Random canonical value: " << can_val;
return 0;
}
Output:
Reference: https://cplusplus.com/reference/random/generate_canonical/Random canonical value: 0.0281975