C ++生成随机数

时间:2015-12-22 21:14:42

标签: c++ random numbers

srand(time(NULL));
    for (int o = 0; o < 8; o++){

        x = rand() % 126 + 33;      
        keysInNumbers[o] = x;
        cout << "Randomly generated number: " << keysInNumbers[o] << endl;
    };

这应该产生33到126之间的随机数,但由于某种原因,有一些数字高于126但从不低于33.我无法弄清楚为什么会这样。

2 个答案:

答案 0 :(得分:2)

您的号码将达到(不包括) 126 + 33 ,根据我的计算结果为159。

这是基本的逻辑,真的。 rand() % 126将进入(不包括)126 ...然后你添加33!

我猜你的意思是x = (rand() % (126-33)) + 33

此外,你应该:

  • 摆脱那些“神奇数字”;
  • 不使用'%',因为分布很差;
  • 研究C ++的内置随机数生成功能(与C相反)。

答案 1 :(得分:0)

您可以使用

轻松生成随机均匀分布
int A = 33;
int B = 126;
auto myrand = std::bind(std::uniform_int_distribution<>(A,B), std::mt19937(std::random_device()()));

for (int o = 0; o < 8; o++){

    x = myrand();      
    keysInNumbers[o] = x;
    cout << "Randomly generated number: " << keysInNumbers[o] << endl;
};

这将使用系统上可用的随机源来播种。