[C 언어] 난수 rand()에 대한 자세한 설명

1. 난수의 성질

실제로 rand() 함수에 의해 생성된 난수는 의사난수(pseudo-random number)로서 수치를 기반으로 특정 공식에 따라 계산되는데, 이 수치를 "seed"라고 합니다. 시드와 난수 사이의 관계는 아래 그림과 같이 정규 분포입니다.

C 언어에는 난수와 시드 사이에 정규 분포가 있습니다.

시드는 컴퓨터가 시작될 때마다 무작위이지만 컴퓨터가 시작되면 변경되지 않습니다. 즉, 시드는 컴퓨터가 시작될 때마다 고정된 값이므로 결과는 다음 공식에 따라 계산됩니다. 즉, 생성된 난수)가 고정됩니다.

2. 난수 생성 예시

C 언어에서는 일반적으로 <stdlib.h> 헤더 파일의 rand() 함수를 사용하여 난수를 생성합니다. 사용법은 다음과 같습니다.

int rand (void);

C 언어에도 난수를 얻을 수 있는 random() 함수가 있지만, random()은 표준 함수가 아니고 VC/VS 등의 컴파일러에서 전달할 수 없기 때문에 덜 사용됩니다.

rand()는 0 ~ RAND_MAX 사이의 정수를 무작위로 생성합니다.

다음은 난수 생성의 예입니다.

#include <stdio.h>
#include <stdlib.h>
int main(){
    
    
    int a = rand();
    printf("%d\n",a);
    return 0;
}

3. 타임스탬프를 사용하여 난수 생성

srand() 함수를 통해 다시 시드하여 시드가 변경되도록 할 수 있습니다. srand()의 사용법은 다음과 같습니다.

 void srand (unsigned int seed);

unsigned int 유형의 매개변수가 필요합니다. 실제 개발에서는 시간을 매개변수로 사용할 수 있는데, 파종 시간이 매번 다르기 때문에 생성되는 씨앗도 달라지며 최종 난수도 달라집니다.

다음과 같이 <time.h> 헤더 파일의 time() 함수를 사용하여 현재 시간(초 단위)을 가져옵니다.

srand((unsigned)time(NULL));

난수를 생성하기 전에 위 코드를 시드하도록 수정하세요.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    
    
    int a;
    srand((unsigned)time(NULL));
    a = rand();
    printf("%d\n", a);
    return 0;
}

4. 특정 범위 내에서 난수 생성

실제 개발에서는 특정 범위 내의 난수가 필요한 경우가 있는데, 너무 크거나 너무 작으면 요구 사항을 충족할 수 없습니다. 그렇다면 특정 범위의 난수를 생성하는 방법은 무엇입니까? 모듈로 방법을 사용할 수 있습니다.

int a = rand() % 10;    //产生0~9的随机数,注意10会被整除

상한 및 하한을 지정하려면 다음을 수행하십시오.

int a = rand() % 51 + 13;    //产生13~63的随机数

분석: 모듈로는 나머지입니다. rand()%51+13우리는 이를 두 부분으로 생각할 수 있습니다: rand()%510에서 50까지의 난수를 생성한 다음 +13최소 a는 13만 가능하고 최대는 50+13=63임을 보장합니다.

예:

13~63 범위의 난수를 생성하는 전체 코드:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
    
    
    int a;
    srand((unsigned)time(NULL));
    a = rand() % 51 + 13;
    printf("%d\n",a);
    return 0;
}

추천

출처blog.csdn.net/Daears/article/details/127424054