2017-05-13 4 views
2

죄송합니다. 비슷한 질문이 이미 게시되어 있지만이 책은 저를 혼란스럽게합니다. "C 프로그래밍 : 절대 초보자 가이드"에서모듈러스 연산자를 사용하여 특정 범위의 확률 변수를 얻으십시오

는 :

dice1 = (rand() % 5) + 1; 

는 주사위 게임 1 ~ 6 사이의 임의의 숫자를 생성, 선이있다.

이 오류가 있습니까? 내 이해에서 % 5을 사용하여 5의 나머지 부분을 얻을 수 없으므로 라인은 1에서 5까지만 숫자를 생성합니다. 나는 절대적인 초보자이므로 오류가 발생했는지 또는 책이 맞는지 알 수 없습니다. 누군가 확인 했어?

+2

이 문제가 맞습니다. 이 책은 숫자가 1에서 6 사이라고 주장하면 틀린 말이다. – StoryTeller

+1

예. 오류입니다. –

+0

감사합니다. 그것은 나를 미치게했다. – 5areductase

답변

0

예, 5 % 5 == 0이므로 전체 표현식에서 1부터 5까지의 숫자 만 얻을 수 있습니다. 이 방법의 다른 문제는 rand()이 아마도 0에서 2까지의 숫자를 반환한다는 것입니다. n -1이므로 다른 값의 총 수는 다른 2의 거듭 제곱으로 똑같이 나눌 수 있습니다. 따라서 modulus는 결과 숫자의 균등 분포를 제공하지 않습니다. rand() 자체가 출력 범위를 따라 고르게 분포 된 값을 제공한다고 가정 할지라도.