因此,我正在尝试使用以下内容为我的随机数生成统一的随机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之类的东西,我会得到该范围内的有效数字。在这里有什么东西可以用于我丢失的双打吗?
答案 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次。