为什么在最低()和最大()之间生成的所有随机数都等于无穷大?

时间:2014-04-08 16:10:55

标签: c++ c++11 random

为什么下面程序中的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)它会生成有限的随机数,但为什么?

1 个答案:

答案 0 :(得分:19)

根据N3797

26.5.8.2.2 [rand.dist.uni.real]

  

2需要:a ≤ bb − a ≤ numeric_limits<RealType>::max()

由于b - a2 * numeric_limits<double>::max(),因此无法满足此条件。