随机双打总是无限的

cst*_*fel 4 c++ random c++11

我有以下内容:

    std::random_device rd;
    std::mt19937_64 randEng(rd());
    std::uniform_real_distribution<double> rg(std::numeric_limits<double>::lowest(), std::numeric_limits<double>::max());

    for(size_t i = 0; i < numToGenerate; i++){
        nums[i] = rg(randEng);
        std::cout << nums[i] << std::endl;
    }   
Run Code Online (Sandbox Code Playgroud)

nums向量预定的位置在哪里numToGenerate

打印出来的每个数字虽然说明了inf我的理解是我在这种情况下设置了它以获得随机数字-1.79769e+308,1.79769e+308因为它碰巧在我的机器上.我在这个随机数生成器的设置中做错了什么

650*_*502 7

可能伪随机数的计算包括差值(max-min).例如,计算一个间的随机数A,B一个简单的方法是:

x = A + rnd*(B - A)
Run Code Online (Sandbox Code Playgroud)

其中rnd是0到1之间的随机数.如果使用最大和最小双精度值执行此操作,则会出现问题,因为该差异大于最大值,因此将变为"无限".

之后A + rnd*infinite如果rnd不为零则总是无穷大,而当它为零时则为NaN.