rand () % 범위 + 더 낮은 것은 무엇을 의미합니까? [닫은]

Dec 18 2020

나는 지금 C를 배우고 있으며이 rand() % range + lower코드 줄의 의미를 이해하지 못합니다 .

printf("I will generate 10 random numbers between %d and %d . . .\n", lower, upper);

int range = upper - lower+1;                        
for(int i = 0; i <= 10; i++) {                      
    int number = rand() % range + lower;            
    printf("%d\t", number);

답변

SergeBallesta Dec 18 2020 at 18:24

이것은 가난한 사람의 선형 랜덤 생성기입니다.

그것은 rand()무작위 정수를 반환하는 공급되기 때문에 실제로 무작위 이며, 구조상 값은> = 하한 및 <= 상한입니다.

그러나 [하위, 상한] 간격의 값이 다른 확률을 가질 수 있기 때문에 여전히 가난한 사람의 도구입니다.

짧게 말하면 임의의 값이 필요한 경우 사용할 수 있지만 암호화 보안 임의 소스가 필요한 경우에는 사용할 수 없습니다.

JhnW Dec 18 2020 at 18:32

abut % 연산자를 읽으십시오. 모듈로 나눗셈입니다. 모듈로 나누기는 가장 큰 범위를 가장 짧은 범위로 균일하게 매핑하는 좋은 도구입니다 (귀하의 경우 rand () % range ). 모든 값을 올바른 위치로 이동하려면 범위 시작을 추가하기 만하면됩니다. 코드 rand () % range + lower 는 A, B 범위에서 난수를 얻는 표준 C 관용구입니다. 예를 들어 (A, B) 범위 또는 <A, B> 범위가있는 부동 소수점 숫자에 대한 더 많은 관용구를 찾을 수 있습니다.