c++ - Rand_Max*(max-min)+min << 那是什么?

标签 c++ stl random c++11 srand

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

所以它的作用是:

  1. rand() : 取一个介于 0 和 RAND_MAX 之间的随机整数
  2. (double) / RAND_MAX : 用 RAND_MAX 除以 double,得到一个在 0 和 1 之间均匀分布的 double:
  3. * (max-min) : 乘以范围 (max-min) , 产生从 0 到 (max-min) 的双倍数
  4. +min : 添加最小值以产生最小值和最大值之间的随机双数
  5. static_cast<T> : 将其转换回原始类型

结果是min之间均匀分布的T型随机数和 max .

关于c++ - Rand_Max*(max-min)+min << 那是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545068/

相关文章:

c++ - 将 long long 除以 int 会遇到什么问题?

c++ - CUDA设备函数的多重定义

迭代器的 C++ 模板构造函数

javascript - 随机路径生成算法

c++ - R 和 C++ 中的随机数

C++ 返回对象,这可能吗?

c++ - STL或Boost中是否有容器在修改后保留排序值?

c++ - 关于 C++ 中的迭代器

java - 生成随机的简单数学除法问题

c++ - 为什么在C++中使用字符串时没有输出?