c++11 随机 double 使用 uniform_real_distribution

标签 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 之类的其他值,我确实会得到该范围内的有效数字。这里有什么我想念的 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/

相关文章:

r - 修复随机列表中的第一个和最后一个数字

c++ - 是否可以限制类实例仅用作临时实例?

c++ - 随机数生成器碰撞测试中的碰撞太多

php - 从 WordPress 媒体库中查询随机图像

c++ - 在不使用数组的情况下找到 "n"数字之间的最大数字?

c++ - 我需要遍历一个结构

c++ - visual studio 2012 中的 initializer_list

c++ - 使用 CreateFile 访问驱动器分区

C++ copy_if lambda 捕获 std::string

c++ - 保护 CRTP 模式免受 "pure virtual"调用中的堆栈溢出