generate(vec.begin(), vec.end(), [=](){return static_cast<T>(static_cast<double>(ran())
/RAND_MAX*(max-min)+min); });
问题: RAND_MAX*(max-min)+min);
好的,所以我知道这件事中的算法、lambda 表达式和捕获子句。我的问题对所有这些都非常荒谬。上面加粗的文字是什么意思。我的意思是,我知道它是随机值生成过程的一部分。但是不知道到底是怎么回事。那么有人可以分解那个微小的小代码吗。
最佳答案
static_cast<double>(ran())/RAND_MAX*(max-min)+min);
我假设你打错了 rand()
,它返回一个从 0 到 RAND_MAX 的伪随机整数。让我们以一种澄清优先级的方式重写它:
(T) ( (((double) rand() / RAND_MAX) * (max-min) ) + min
所以它的作用是:
-
rand()
: 取一个介于 0 和 RAND_MAX 之间的随机整数 -
(double) / RAND_MAX
: 用 RAND_MAX 除以 double,得到一个在 0 和 1 之间均匀分布的 double: -
* (max-min)
: 乘以范围(max-min)
, 产生从 0 到 (max-min) 的双倍数 -
+min
: 添加最小值以产生最小值和最大值之间的随机双数 -
static_cast<T>
: 将其转换回原始类型
结果是min
之间均匀分布的T型随机数和 max
.
关于c++ - Rand_Max*(max-min)+min << 那是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545068/