generate(vec.begin(), vec.end(), [=](){return static_cast<T>(static_cast<double>(ran())
/RAND_MAX*(max-min)+min); });
Problem: RAND_MAX*(max-min)+min);
Ok, so I know the algorithms, lambda expressions, and, capture clause in this thing. My question is quite ridiculous to all of that. What is the bolded text above mean. I mean, I know its part of the random value generation process. But don't know exactly what the hell is going on. So can someone pls break down that tinny tiny little code.
static_cast<double>(ran())/RAND_MAX*(max-min)+min);
I'm assuming you mistyped rand()
, which returns a pseudorandom integer from 0 to RAND_MAX. Let's rewrite that in a way that clarifies the precedence a bit:
(T) ( (((double) rand() / RAND_MAX) * (max-min) ) + min
So what it does is:
rand()
: take a random integer between 0 and RAND_MAX(double) / RAND_MAX
: divide as double by RAND_MAX, yielding a uniformly distributed double between 0 and 1: * (max-min)
: multiply by the range (max-min)
, yielding a double from 0 to (max-min)+min
: add the minimum to yield a random double between min and maxstatic_cast<T>
: cast it back to the original typeThe result is a uniformly distributed random number of type T between min
and max
.