具有两个不同结果的Rand函数 我的问题是C++中的RAND函数 请检查此项,为什么会产生不同的结果: int a = 2 * rand()%5; // result = 0 int a = 2 * ( rand()%5 ); // result = 6
第一 二号具有两个不同结果的Rand函数 我的问题是C++中的RAND函数 请检查此项,为什么会产生不同的结果: int a = 2 * rand()%5; // result = 0 int a = 2 * ( rand()%5 ); // result = 6,c++,random,qt-creator,C++,Random,Qt Creator,第一 二号 尽管您更希望在第二次迭代中rand()返回不同数字的概率是1-1/(1+rand_MAX),但第一个表达式被分组为 这与第二组不同。例如,您可以看到第二个表达式的值总是偶数 *和%具有相同的优先级,因此关联性开始发挥作用,这对于两个运算符都是从左到右的。尽管您更希望rand()在第二次迭代中返回不同数字的概率是1-1/(1+rand_MAX),但是,第一个表达式分组为 这与第二组不同。例如,您可以看到第二个表达式的值总是偶数 *和%具有相同的优先级,因此关联性发挥作用,这对于两个运
尽管您更希望在第二次迭代中
rand()
返回不同数字的概率是1-1/(1+rand_MAX)
,但第一个表达式被分组为
这与第二组不同。例如,您可以看到第二个表达式的值总是偶数
*
和%
具有相同的优先级,因此关联性开始发挥作用,这对于两个运算符都是从左到右的。尽管您更希望rand()
在第二次迭代中返回不同数字的概率是1-1/(1+rand_MAX)
,但是,第一个表达式分组为
这与第二组不同。例如,您可以看到第二个表达式的值总是偶数
*
和%
具有相同的优先级,因此关联性发挥作用,这对于两个运算符都是从左到右。因为这正是rand()
的真正目的。如参考文件所述:
返回介于0
和之间的伪随机整数
RAND_MAX
你希望它产生不同的结果,否则它将是一个无用的PRNG
加上第一个表达式先相乘,然后是模。而第二个则相反
要获得相同的值,必须固定运算符优先级,然后在调用rand()
之前使用相同的种子调用srand
两次
请注意,现在应该使用
标题,而不是rand()
,因为这正是rand()
的真正目的。如参考文件所述:
返回介于0
和之间的伪随机整数
RAND_MAX
你希望它产生不同的结果,否则它将是一个无用的PRNG
加上第一个表达式先相乘,然后是模。而第二个则相反
要获得相同的值,必须固定运算符优先级,然后在调用rand()
之前使用相同的种子调用srand
两次
请注意,您现在应该使用
标题,而不是rand()
,因此您会问为什么rand()
函数每次执行/调用时都返回随机数?这就是它的目的:操作符优先级也是如此2*rand()%5
与(2*rand())%5
相同。非常感谢……@ralismark——这不是优先级,而是分组<代码>*和%
具有相同的优先级。它们从左到右分组,这就是为什么您的备用版本是正确的。所以您会问为什么rand()
函数每次执行/调用时都返回随机数?这就是它的目的:操作符优先级也是如此2*rand()%5
与(2*rand())%5
相同。非常感谢……@ralismark——这不是优先级,而是分组<代码>*和%
具有相同的优先级。它们从左到右分组,这就是为什么您的备选版本是正确的。
(2 * rand()) % 5