2个值之间的随机数

时间:2014-01-02 17:41:58

标签: c++ random

嗨我想生成2个值之间的随机数。 我有2个变量。 这是默认值: (MIN = MAX = 1)

以后这个值可以改变!

我用过这个:

rand()%(max-min)+min;

但是我得到了关于除零的调试。 有什么想法吗?

编辑:使用默认值生成的数字必须为1.

2 个答案:

答案 0 :(得分:7)

在您的初始情况下,(max-min)0,模数为零为undefined behavior。从C ++草案标准部分5.6 乘法运算符说:

  

二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数。如果/或%的第二个操作数为零,则行为未定义。 [...]

至于在min and max之间生成随机数,您应该使用random headeruniform_int_distrubution

#include <iostream>
#include <random>

int main()
{
    std::random_device rd;

    std::mt19937 e2(rd());
    int min = 1, max = 1 ;

    std::uniform_int_distribution<int> dist(min,max);

    for (int n = 0; n < 10; ++n) {
            std::cout << dist(e2) << ", " ;
    }
    std::cout << std::endl ;
}

如果出于某种原因, C ++ 11 不是一个选项,那么 C FAQ rand部分[M, N]中为我们提供了正确的公式3}}表示生成{{1}}范围内的随机数,您使用以下内容:

  

M + rand()/(RAND_MAX /(N - M + 1)+ 1)

答案 1 :(得分:2)

范围[min, max]包含max - min + 1个数字!所以你的代码应该是这样的:

rand() % (max - min + 1) + min;

不要忘记检查RAND_MAX的值,但是你的范围不应该接近它。事实上,你希望它比这小得多,以避免过多的偏见。