我有以下内容:
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
因为它碰巧在我的机器上.我在这个随机数生成器的设置中做错了什么
可能伪随机数的计算包括差值(max-min).例如,计算一个间的随机数A
,B
一个简单的方法是:
x = A + rnd*(B - A)
Run Code Online (Sandbox Code Playgroud)
其中rnd
是0到1之间的随机数.如果使用最大和最小双精度值执行此操作,则会出现问题,因为该差异大于最大值,因此将变为"无限".
之后A + rnd*infinite
如果rnd
不为零则总是无穷大,而当它为零时则为NaN.
归档时间: |
|
查看次数: |
154 次 |
最近记录: |