2015-02-07 7 views
0

C++에서 Marsaglia의 곱셈 포함 캐리 알고리즘과 같은 두 개의 부호없는 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; 
+1

'usigned int '는 정확히 32 비트를 보장하지 않습니다. Btw, 뭐가 문제 야? – JohnB

+3

확실하지 않은게 확실하지 않습니다 –

+0

"모듈러스의 한계"란 무엇입니까? – harold

답변

0

참조 : C++ 03 제 5.6 절 4

이진은/오퍼레이터는 몫을 산출하고, 이진 % 연산자는 제에 의해 제 발현의 분할에서 나머지를 산출한다./또는 %의 두 번째 피연산자가 0이면 동작이 정의되지 않습니다. 그렇지 않으면 (a/b) * b + a % b는 a와 같습니다. 두 피연산자가 음수가 아닌 경우 나머지는 음수가 아닙니다. 그렇지 않은 경우, 나머지의 부호는 구현에 의해 정의됩니다.

c에서 모듈러스의 제한 사항을 볼 수 없습니다.