몽상실현개발주의

[따배씨] 12.12 난수 생성기 모듈 만들기 예제 본문

Language/C

[따배씨] 12.12 난수 생성기 모듈 만들기 예제

migrationArc 2021. 6. 14. 21:47

[따배씨] 12.12 난수 생성기 모듈 만들기 예제

따배씨 - 따라하며 배우는 C언어

12강 Storage Classes, Linkage and Memory Management

12.12 난수 생성기 모듈 만들기 예제

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
    /*
        rand()
        - 0 to RAND_MAX (typically INT_MAX)
        - defined in stdlib.h.
     */
    
//    srand(1); // random seed, seed 값을 바꾸면 다른 랜덤 값이 나옴
    srand((unsigned int)time(0));   // seed 값을 매번 바꾸기 위해, time 함수를 이용
    
    for (int i = 0; i < 10; ++i){
        printf("%d\n", rand());
//        printf("%d\n", rand() % 6 + 1);
    }
    
    return 0;
}
srand(num);
  • rand() 함수의 seed 값을 입력하여, rand 함수의 결과의 양상이 달라지도록 함

 

 

#include <stdio.h>

int main(){
    unsigned int next = 1;
    
    for (int  i = 0; i < 10; ++i){
        next = next * 1103515245 + 1234;
        next = (unsigned int) (next / 65536) % 32768;
        printf("%d\n", (int)next);
    }
    return 0;
}
  • rand() 함수의 내부 알고리즘 중 하나
    • seed 값을 next 값으로 설정
next = next * 1103515245 + 1234;
  • over flow 를 이용
next = (unsigned int) (next / 65536) % 32768;
  • int 형과 자리수를 맞추는 단계

 

 

// main.c
#include <stdio.h>
#include <time.h>
#include "my_rand.h"

int main(){
    my_srand((unsigned int)time(0));
    
    for (int i = 0; i < 10; ++i){
        printf("%d\n", my_rand() % 6 + 1);
    }
    return 0;
}


// my_rand.h

#define my_rand_h

#include <stdio.h>

void my_srand(unsigned int);
int my_rand(void);

#endif /* my_rand_h */

// my_rand.c
#include "my_rand.h"

static unsigned int next = 1;

void my_srand(unsigned int seed){
    next = seed;
}

int my_rand(){
    next = next * 1103515245 + 1234;
    next = (unsigned int) (next / 65536) % 32768;
    
    return (int)next;
}

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

 

Comments