2012-11-07 3 views
1

RAND_MAX가 부호없는 int 변수 안에 들어갈 수 있는지를 확인하려고합니다. C99 표준을 살펴본 결과, RAND_MAX는 적어도 32767의 값을 가질 수 있다는 것을 알았습니다. RAND_MAX가 int 값으로 확장된다는 것을 알고 있지만, long int인지 확실하지 않습니다. 지금은 unsigned long int 변수로 작업하고 있지만 unsigned int 변수를 사용하도록 내 소스 코드를 단순화하고 싶습니다. 요약하면RAND_MAX는 <= UINT_MAX가 보장됩니까?

에서, C99 표준 마찬가지 이러한 가정 문이다 또한

RAND_MAX < = UINT_MAX < = ULONG_MAX

, RAND_MAX (즉 같지 않음에) UINT_MAX 또는 ULONG_MAX보다 명확 이하이다. RAND_MAX의 가치는 종종 메르 센 소수이지만, 이것이 표준인지 확실하지 않습니다.

답변

12

RAND_MAXrand()에 의해 반환 될 수있는 최대 값입니다. rand()int을 반환하는 것으로 정의되므로 RAND_MAXINT_MAX을 초과하지 않으며 따라서 UINT_MAX도 넘지 않습니다.

+1

@WhozCraig * 정수 상수 표현 *은 값이'int' 내부에 들어 있다는 것을 의미하지 않습니다. – ecatmur

+0

이 시스템은 서명되지 않은 함수를 구현할 수 있음을 암시하는 것처럼 보이기 때문에이 [link] (http://stackoverflow.com/questions/10708433/rand-max-macro-signed-or-unsigned) RAND_MAX에 대한 문자없는 부호없는 값을가집니다. –

+3

@VilhelmGray :'rand'는 항상'int'를 반환합니다. 그렇지 않으면 그 링크에서 뭔가를 제안하지 않습니다. 어떤 시스템은 어떤 이유로 RAND_MAX에 부호없는 리터럴을 사용하지만, 그 값은 여전히 ​​<= INT_MAX가됩니다. – interjay

0

시도 this.

이 질문에 대한 답변자는 Mersenne Twister가 필요한 모든 제어와 속도를 제공함에 동의합니다. 또한 C++ 프로그램에 아주 쉽게 추가 할 수 있습니다.

그러나 다른 많은 사람들처럼 rand()의 반환 유형 int는 사실상 RAND_MAX가 UINT_MAX보다 작음을 보장합니다.

2

randint rand(void); 서명을 가지고, 그래서 int의 음이 아닌 범위 때문에 unsigned int 내부 맞아야 반환 비 음수 값 unsigned int의 범위에 포함된다.

이 명시 RAND_MAX가 < = INT_MAX이지만 요구 RAND_MAX 32767의 하한과 함께 RAND_MAX의 범위 0rand 리턴 값 rand이하기 범위 0 커버 예정임을 나타 것을 명시하지 RAND_MAX이며, INT_MAX보다 큰 경우에는 그렇지 않습니다.

관련 문제