OK, so I've got some RNG code that (when all is said and done) boils down to this:
#include <limits>
#include <random>
#include <chrono>
#include <iostream>
double randomValue() {
// Seed a Mersenne Twister (good RNG) with the current system time
std::mt19937 generator(std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_real_distribution<double> dist(
std::numeric_limits<double>::lowest(),
std::numeric_limits<double>::max()
);
// Problem lives here
for (unsigned int i = 0; i < 30; i++)
std::cout << dist(generator) << "\n";
}
The output from this is 30 lines of inf
. Why?
Compiling with g++
Debian 4.9.2-10, using -std=c++11
and no other flags. And, before anyone else comments on it, I'm using the built-in Mersenne Twister-based RNG because my application requires high-quality random numbers, and seeding it with the system time (so no, it's not just the same seed over and over again).
According to C++14 section 26.5.8.2.2 paragraph 2:
Requires: a ≤ b and b − a ≤ numeric_limits<RealType>::max().
In your case, b-a is greater than the allowed range.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With