c ++ 11使用uniform_real_distribution随机加倍

时间:2014-09-22 03:18:27

标签: c++ c++11 random

因此,我正在尝试使用以下内容为我的随机数生成统一的随机double

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

然后当然叫rg(randEng)

但是,如果我像这样使用double的数字限制,我没有得到从-DOUBLE到+ DOUBLE的随机样本。相反,我得到的数字大约为maginute e + 306或e + 307或e + 308。我在这里做错了什么不允许我得到我想要的范围?

如果我在统一分布中输入-10,10之类的东西,我会得到该范围内的有效数字。在这里有什么东西可以用于我丢失的双打吗?

2 个答案:

答案 0 :(得分:1)

std::numeric_limits<double>::min()

是具有最小绝对值的double值。 如果你想要最小的负(最高abs),你可以使用

-std::numeric_limits<double>::max()

从技术上讲,可能还有

numeric_limits<double>::has_infinity
-numeric_limits<double>::infinity()

但这似乎不是你想要的

答案 1 :(得分:0)

我不确定我理解这个问题; std::numeric_limited<double>::min()将返回类似2.2250738585072014e-308的内容,这是一个正值。它是科学记数法; e-308表示您要将小数位移到左侧约308次。