From the C++11 header , I was wondering if a std::uniform_real_distribution<double>
object can spit out a double that's greater than 0.99999999999999994? If so, multiplying this value by 2 would equal 2.
Example:
std::default_random_engine engine;
std::uniform_real_distribution<double> dist(0,1);
double num = dist(engine);
if (num > 0.99999999999999994)
num = 0.99999999999999994;
int test1 = (int)(0.99999999999999994 * 2);
int test2 = (int)(0.99999999999999995 * 2);
std::cout << test1 << std::endl; // 1
std::cout << test2 << std::endl; // 2
The maximum value
dist(engine)
in your code can return isstd::nextafter(1, 0)
. Assuming IEEE-754 binary64 format fordouble
, this number isIf your compiler rounds floating point literals to the nearest representable value, then this is also the value you actually get when you write
0.99999999999999994
in code (the second nearest representable value is, of course,1
).