Почему u
в программе ниже всегда бесконечность?
#include <random>
#include <limits>
int main()
{
auto seed = std::random_device()();
std::mt19937 randomEngine(seed);
const double lo = std::numeric_limits<double>::lowest(); // ~= -1.8e+308
const double hi = std::numeric_limits<double>::max(); // ~= 1.8e+308
std::uniform_real_distribution<> U(lo, hi);
double u = U(randomEngine); // always 1.#INF000000000000
return 0;
}
Это явно связано с диапазоном, переданным в std::uniform_real_distribution
. Если передать его (lo,0)
или (0,hi)
, он порождает конечные случайные числа, но почему?