по модулю с неподписанным int

В C ++ я пытаюсь использовать оператор по модулю для двух беззнаковых переменных типа int, как в алгоритме умножения Марсаглии с переносом.
Результаты кажутся правильными, но я не уверен насчет ограничений по модулю.

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;

0

Решение

Ссылка: C ++ 03 п. 5.6 п. 4

Двоичный / оператор дает частное, а двоичный оператор% — остаток от деления первого выражения на второе. Если второй операнд / или% равен нулю, поведение не определено;
в противном случае (a / b) * b + a% b равно a. Если оба операнда неотрицательны, то остаток неотрицателен; если нет, знак остатка определяется реализацией.

Я не вижу никаких ограничений по модулю в с.

0

Другие решения


По вопросам рекламы [email protected]