- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
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/
这个简单的代码: int main() { srand(time(NULL)); const int size = rand() % RAND_MAX; int numbers[si
我希望生成介于 0 和 1 之间的随机数。(显然,这在其他地方也有应用。) 我的测试代码: #include #include #include int main() { double uR;
这website声明宏 RAND_MAX 的值是库相关的,最小值为 32767。它没有进一步详细说明。 依赖库是什么意思??这是否意味着假设有来自两个不同库的两个宏 RAND_MAX,我们必须通过使用
我正在尝试确定 RAND_MAX 是否可以放入 unsigned int 变量中。翻阅C99标准后,我只发现RAND_MAX保证值至少为32767。虽然我知道RAND_MAX扩展为int值,但我不确定
Accelerated C++ Andrew Koenig 的第 7-9 题问: 7-9. (difficult) The implementation of nrand in §7.4.4/135
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
这个问题已经有答案了: How to get a larger random number from the c function rand() (4 个回答) 已关闭 8 年前。 我知道 RAND_
我的作业涉及生成 0 和 2^30 之间的随机整数。现在,在过去我们了解到 rand() 只返回小于 RAND_MAX 的整数,这小于 UINT_MAX,并且我们可以使用位移来填充 UINT_MAX
这个表达式是如何工作的? Num*rand() / RAND_MAX 例如,如果我用 7.7 替换数字,它会给我从 0. 到 7. 的值(双)。 最佳答案 rand()函数生成 0 之间的整数值和
我想找到一种在 C 中获取随机数的不偏斜的方法(尽管我最多将它用于 0-20 的值,更可能只有 0-8)。我看过这个公式,但在运行了一些测试后,我不确定它是否有偏差。有帮助吗? 这里是使用的完整函数:
我查阅了 C 标准(自 1999 年起),它只说 RAND_MAX 应该至少为 32767,但没有说明这个宏应该扩展为有符号整数还是无符号整数。单一 UNIX 规范(link 1、link 2)和 L
为什么它不是const?我认为这不是一个明确的 C++ 方式。也许有更多的 C++ 方法来生成随机数,是吗? 最佳答案 RAND_MAX 来自 C 标准库,它被定义为一个宏。 在 C 中,宏是定义 l
这与这个问题有关 - random number generation in C++ ... first number not very random #include #include #inc
generate(vec.begin(), vec.end(), [=](){return static_cast(static_cast(ran()) /RAND_MAX*(max-min)+min
我对 C++ 很感兴趣,尽管我怀疑它只是导入了 C 标准定义。我相信标准所说的答案是否定的,但我对实际答案最感兴趣。 如果 RAND_MAX 始终为 (2^n)-1(其中 n 是某个自然数 - 实际上
我试图使用 rand() 生成一些随机数,但我首先检查了 RAND_MAX,因为我想生成一些大数。在 Windows 10 中 printf("%x",RAND_MAX); 给出 0x7fff 而在
当 RAND_MAX 的值为 0.000000。 RAND_MAX 不应该为 rand() 函数生成的数字设置最大值吗? #include #include int mai
我看了很多地方,似乎找不到答案。我明白rand() / RAND_MAX == 1的概率低是因为 rand()不太可能等于 RAND_MAX . 但是理论上可行吗? 我看到有人写类似的东西,范围是 [
我正在阅读 C FAQ并在 question 中找到它建议我使用 rand()/(RAND_MAX/N + 1) 而不是更流行的方式 rand() % N。 这样做的原因是,当 N 是一个小数时,ra
如何生成 0 到 n 范围内的随机数,其中 n 可以是 > RAND_MAX(在 C、C++ 中)? 谢谢。 最佳答案 将生成分成两个阶段,然后组合生成的数字。 关于c++ - 生成 0 到 n 范围
我是一名优秀的程序员,十分优秀!