uniform_real_distribution()的最小值

enc*_*enc 2 c++ random c++11

在我的程序中,我使用生成0到1之间的均匀随机数 uniform_real_distribution()

#include <random>

default_random_engine e;
uniform_real_distribution<double> u(0,1);

double rand_num = u(e);
Run Code Online (Sandbox Code Playgroud)

我想知道除了0之外,生成的随机数的最小值是多少,即两个随机数之间的最小间隙.

Pra*_*han 5

您可以std::nextafter用来回答这个问题.

std::nextafter(from, to)返回的下一个可表示浮点值(可以是反规范)from中的方向to.

对于这种情况from == 0.0,您也可以使用std::numeric_limits<F>::denorm_min(),F您关心的浮点类型在哪里.虽然std::numeric_limits<F>::denorm_min()总是返回最小正可表示值,但它可以是非规范化数字.如果F不支持非正规,则返回值将等于std::numeric_limits<F>::min().

感谢WhozCraig和TC的纠正.

  • 看起来像libstdc ++和libc ++ [可以生成非规范化数字](http://coliru.stacked-crooked.com/a/585be0cdece94068),所以我猜测最小值将是`std :: numeric_limits <double> :: denorm_min()`.该标准没有明确指定任何内容. (2认同)