我有以下内容:
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+308
和1.79769e+308
之间得到随机数字,因为它恰好是我的机器。我在这个随机数生成器的设置中做错了什么
答案 0 :(得分:7)
伪随机数的计算可能包括差值(max-min)。例如,要计算A
和B
之间的随机数,一个简单的方法就是:
x = A + rnd*(B - A)
其中rnd
是介于0和1之间的随机数。如果使用最大和最小双精度值执行此操作,则会出现问题,因为该差异大于最大值,因此将变为“无限”
如果A + rnd*infinite
不为零,那么rnd
总是无限的,而当它为零时,{{1}}总是无限。