所以我尝试使用以下方法生成统一的随机 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 之类的其他值,我确实会得到该范围内的有效数字。这里有什么我想念的 double 吗?
最佳答案
std::numeric_limits<double>::min()
是绝对值最小的 double 值。 如果你想要最小的负值(最高的 abs),你可以使用
-std::numeric_limits<double>::max()
从技术上讲,也可能有
numeric_limits<double>::has_infinity
-numeric_limits<double>::infinity()
但这似乎不是你想要的
关于c++11 随机 double 使用 uniform_real_distribution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25966245/