随机双打总是无限的

时间:2014-10-19 20:38:24

标签: c++ c++11 random

我有以下内容:

    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;
    }   

其中nums是预设为numToGenerate

的向量

打印出来的每个号码虽然说inf我的理解是我设置了这个号码以便在这种情况下-1.79769e+3081.79769e+308之间得到随机数字,因为它恰好是我的机器。我在这个随机数生成器的设置中做错了什么

1 个答案:

答案 0 :(得分:7)

伪随机数的计算可能包括差值(max-min)。例如,要计算AB之间的随机数,一个简单的方法就是:

x = A + rnd*(B - A)

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

如果A + rnd*infinite不为零,那么rnd总是无限的,而当它为零时,{{1}}总是无限。