랜드() %7이 항상 0을 반환하는 이유는 무엇입니까?
이것은 정말 이상한 문제인 것 같습니다.
내 코드는 다음과 같습니다.
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
@autoreleasepool {
srand((unsigned int)time(NULL));
int newRandomNumber = 0;
newRandomNumber = rand() % 7;
NSLog(@"%d", rand() % 7); //This prints out what I expected
NSLog(@"newRandomNumber = %d", newRandomNumber); // This always prints out 0!
}
return 0;
}
만약 내가 그 한 줄을 바꾼다면,
newRandomNumber = rand() % 7
와 함께
newRandomNumber = rand() % 8
모든 것이 완벽하게 작동합니다.왜 그럴까요?
이거는.
int seed;
for(seed = 1; seed < 10; seed++) {
srand(seed);
printf("%4d %16d\n", seed, rand());
}
인쇄물
1 16807
2 33614
3 50421
4 67228
5 84035
6 100842
7 117649
8 134456
9 151263
그래서 나는 생각합니다.rand() = seed * 16807
위키백과 기사 선형 합동 생성기는 CarbonLib가 실제로 Xn+1 = Xn * 16807을 사용하여 임의의 숫자를 생성한다는 것을 확인합니다.
가능성은 낮아 보이지만 일부 검정을 실행하는 것은 적어도 크기가 큰 변수에서 sr과 첫 번째 랜드가 항상 7로 나누어집니다.
몇 번의 주행에서 저는 1303562743, 2119476443, 2120232758을 받았는데, 모두 모드 7대 0이었습니다.
두번째rand()
효과가 있습니다, 왜냐하면 그것은 두 번째이기 때문입니다.rand()
던지다rand()
초행 전에rand()
또는 더 나은, 더 나은 난수 생성기를 사용합니다.random
또는arc4rand
가능하면
C++에서 (rand() %anything)이 항상 0인 이유는 무엇입니까?라는 스택 오버플로 질문도 참조하십시오.
언급URL : https://stackoverflow.com/questions/7866754/why-does-rand-7-always-return-0
'programing' 카테고리의 다른 글
RegisterStartupScript가 ScriptManager의 Updatepanel에서 작동하지 않습니다.왜 그런 것일까요? (0) | 2023.08.07 |
---|---|
NVM에서 지정한 노드 버전을 사용하기 위한 Visual Studio 코드 (0) | 2023.08.07 |
jQuery를 사용하여 포인터에서 손가락으로 커서를 변경하는 방법은 무엇입니까? (0) | 2023.08.07 |
jQuery를 사용하여 요소 ID의 콜론 처리 (0) | 2023.08.07 |
"AutoSize"를 Excel 시트 열로 설정하는 방법(NPOI) (0) | 2023.08.07 |