我的问题是关于C ++中的rand函数 请检查一下,为什么会产生不同的结果:
int a = 2 * rand()%5; // result = 0
int a = 2 * ( rand()%5 ); // result = 6
答案 0 :(得分:2)
尽管您希望rand()
在第二次迭代中返回不同数字的概率为1 - 1 / (1 + RAND_MAX)
,但第一个表达式被分组为 为< / p>
(2 * rand()) % 5
与第二个分组不同。例如,您可以看到第二个表达式的值始终是偶数。
*
和%
具有相同的优先级,因此关联性发挥了作用,这两个运算符从左到右。>
答案 1 :(得分:0)
因为这实际上是rand()
的目的。作为cppreference状态:
返回介于
0
和RAND_MAX
之间的伪随机整数srand
。
您希望它会产生不同的结果,否则它将是无用的PRNG。
加上第一个表达式先相乘然后取模的事实。而第二个则相反。
要获得相同的值,您必须先确定运算符的优先级,然后在调用rand()
之前,两次使用相同的种子调用<random>
。
请注意,您现在应该使用rand()
标头,而不是{{1}}。