난수 발생 함수

   

 

srand( (unsigned)time( NULL ) ); // 난수 발생초기화

m_iNowBlockShape = rand()%7; // 난수 발생

  

 

 

 

 

C에서 난수 발생

   

다른 언어와 비슷하겠지만 C언에서 여러 개의 난수표를 가지고 있습니다. 이 난수표에는 임의의 수가 나열되어 있으며 C에서 난수표의 값을 가져오는 방식입니다.

이 때 동일한 난수표와 동일한 위치에서 난수를 가져오게 된다면 어떻게 될까요?

항상 같은 값만 나올 것입니다.

그래서 사용할 난수표와 위치를 항상 변경해 줘야 하는데 srand() 함수로 변경할 수 있습니다.

srand 파라미터에 어떤 숫자를 넣어 주면 난수표와 위치가 변경됩니다.

그렇다면 항상 다른 값의 파라미터를 입력해야 하는데, 어떻게 해야 할까요?

또 난수를 발생시켜 넣어 줄까요? ;;

이 때는 시간을 파라미터로 넣어 주면 됩니다. 시간은 항상 변하니까요^^.

 

그래서 C 에서는 아래처럼 사용됩니다.

 

srand( (unsigned)time( NULL ) ); // 난수 발생초기화

m_iNowBlockShape = rand(); // 난수 발생

  

 

 

 

난수 발생하는 방법을 알았는데,

만약 0 ~ 6까지의 난수를 생성하려면 어떻게 해야 할까요?

생성된 난수를 7로 나눈 나머지를 사용하면 되겠죠^^

 

srand( (unsigned)time( NULL ) ); // 난수 발생초기화

m_iNowBlockShape = rand()%7; // 0 ~ 6까지의 난수 발생

  

 

 

 

그렇다면 난수의 최대값을 얼마일까요?

컴파일러 마다 다를 수 있는데 헤더 파일에 선언되어 있습니다.

 

printf("RAND_MAX: %d", RAND_MAX); // 생성할 수 있는 난수의 최대값

  

 

 

 

 

RAND_MAX 는 어디 있으며, srand(), rand() 함수는 어디에 있나요?

아래 헤더 파일을 추가해 줘야 합니다.

 

#include <stdlib.h> // RAND_MAX, srand(), rand() 함수

#include <time.h> // time() 함수

  

 

 

 

 

난수 초기화 함수를 여러 번 실행하면 난수 발생이 더 효과적인가요?

=> 그렇지 않습니다. 초기화를 한 번하던 열번 하던 효과는 같습니다.~~

 

 

 

 

난수 초기화를 하지 않으면 항상 같은 수가 나오나요?

=> 컴파일러마다 약간 다를 가능성도 있지만 이론상으로는 항상 같은 값이 나옵니다.

 

아래는 C에서 난수를 발생한 예입니다.

 

 

#include <stdio.h>

#include <stdlib.h> // RAND_MAX, srand(), rand() 함수

#include <time.h> // time() 함수

 

 

int main(int argc, char* argv[])

{

 

//    srand( (unsigned)time( NULL ) ); // 난수 발생초기화

 

    for (int i=0;i<10;i++)

    {

        printf("\n%d",rand());

    }

      

    

    return 0;

}

 

 

 

41

18467

6334

26500

19169

15724

11478

29358

26962

24464

+ Recent posts