modulo with unsigned int

时间:2015-02-07 11:33:54

标签: c++ random modulo prng

在C ++中,我尝试对两个无符号的int变量使用模运算符,就像Marsaglia乘以进位算法一样。 结果似乎正确,但我不确定模数的局限性。

m_upperBits = (36969 * (m_upperBits & 65535) + (m_upperBits >> 16))<<16;
m_lowerBits = 18000 * (m_lowerBits & 65535) + (m_lowerBits >> 16);
unsigned int sum = m_upperBits + m_lowerBits;  /* 32-bit result */
unsigned int mod = (max-min+1);
int result=min+sum%mod;

1 个答案:

答案 0 :(得分:0)

参考:C ++ 03第5.6段第4条

  

二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数。如果/或%的第二个操作数为零,则行为未定义;   否则(a / b)* b + a%b等于a。如果两个操作数都是非负的,那么余数是非负的;如果没有,余数的符号是​​实现定义的。

我没有看到c中的模数有任何限制。