【发布时间】:2018-12-22 23:34:14
【问题描述】:
我想生成一些随机数,比如从min 到max。问题是rand() 在[0, RAND_MAX] 范围内生成数字。将此缩放到 [min, max] 会导致每个数字的范围为 1,但 max 除外,它在 RAND_MAX 次中出现一次。如果我设定上限max + 1,我可能仍会得到max + 1 作为值。基本上,有没有办法使范围[min, max + 1)?
这是我的一些代码:
int u_rand(int min, int max)
{
return (int)((double)rand() / RAND_MAX * (max - min + 1)) + min; //has a chance to spit out max + 1
}
【问题讨论】:
-
提示:
(max - min + 1)位为您提供范围的宽度,然后+ min偏移从min开始而不是0。 -
不是骗人的,因为它询问了 C++,但这里有很好的信息:stackoverflow.com/questions/4195958/…
-
对于
[min, max),如果你能容忍一点不均匀,试试rand()%(max-min) + min; -
您需要
max-min > RAND_MAX的解决方案吗?
标签: c