兰德函数具有两个不同的结果

时间:2018-07-18 08:36:52

标签: c++ random qt-creator

我的问题是关于C ++中的rand函数 请检查一下,为什么会产生不同的结果:

int a = 2 * rand()%5; // result = 0
int a = 2 * ( rand()%5 ); // result = 6

数字1

数字2

2 个答案:

答案 0 :(得分:2)

尽管您希望rand()在第二次迭代中返回不同数字的概率为1 - 1 / (1 + RAND_MAX),但第一个表达式被分组为 为< / p>

(2 * rand()) % 5

与第二个分组不同。例如,您可以看到第二个表达式的值始终是偶数。

*%具有相同的优先级,因此关联性发挥了作用,这两个运算符从左到右。

答案 1 :(得分:0)

因为这实际上是rand()的目的。作为cppreference状态:

  

返回介于0RAND_MAX之间的伪随机整数   srand

希望它会产生不同的结果,否则它将是无用的PRNG。

加上第一个表达式先相乘然后取模的事实。而第二个则相反。

要获得相同的值,您必须先确定运算符的优先级,然后在调用rand()之前,两次使用相同的种子调用<random>


请注意,您现在应该使用rand()标头,而不是{{1}}。

相关问题