gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:28:33 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com