C++ 난수 생성 (Random Number Generation)

2021. 3. 11. 16:32·SW개발/C++
목차
  1. Linear congruential generator
  2. std::rand
  3. <random>
반응형

난수 생성 (Random Number Generation)

Linear congruential generator

  • 선형 합동 생성기

    • 널리 알려진 유사난수 생성기이다.
    unsigned int    PRNG()  // Pseudo Random Number Generator
    {
        static unsigned int seed = 5523;  // seed number
    
        seed = 8253729 * seed + 2396403;
        return (seed % 32768);
    }

std::rand

  • std::rand() 함수로 나올 수 있는 최댓값인 RAND_MAX를 이용하여 범위를 제한한다.

    • 고르게 분포되지는 않는다.
    #include <iostream>
    
    int getRandomNumber(int min, int max)
    {
        static const double fraction = 1.0 / (RAND_MAX + 1.0);
    
        return (min + static_cast<int>((max - min + 1) * \
                                        std::rand() * fraction));
    }
    
    int main()
    {
        using namespace std;
    
        for (int i = 0; i < 10; ++i)
            cout << getRandomNumber(5, 8) << '\n';
    }

<random>

  • C++11

  • 위의 경우들보다 더 정교하다.

  • Mersenne Twister

    • 난수 발생 속도가 빠르고 메모리를 적게 차지한다.

    • 난수 발생 주기(똑같은 숫자가 발생하는 주기)가 메르센 소수인 2^19937 - 1이라서 이름이 mt19937이다.

    • 참고 : 케이플러스

    #include <iostream>
    #include <random>
    
    int main()
    {
        using namespace std;
    
        random_device   rd;
        mt19937         mersenne(rd());
        uniform_int_distribution<> dice(1, 6);
    
        for (int i = 0; i < 10; ++i)
            cout << dice(mersenne) << endl;
    }
반응형
저작자표시 (새창열림)

'SW개발 > C++' 카테고리의 다른 글

C++ cin.ignore  (0) 2021.03.11
C++ cin  (0) 2021.03.11
C++ 반복문  (0) 2021.03.11
C++ switch  (0) 2021.03.11
C++ 제어 흐름 (Control Flow)  (0) 2021.03.11
  1. Linear congruential generator
  2. std::rand
  3. <random>
'SW개발/C++' 카테고리의 다른 글
  • C++ cin.ignore
  • C++ cin
  • C++ 반복문
  • C++ switch
Caniro
Caniro
  • Caniro
    Minimalism
    Caniro
  • 전체
    오늘
    어제
    • 전체보기 (319)
      • SW개발 (268)
        • Java Spring (6)
        • C++ (186)
        • Python (21)
        • Linux (16)
        • 알고리즘 (13)
        • Git (4)
        • Embedded (1)
        • Raspberrypi (9)
        • React (3)
        • Web (2)
        • Windows Device Driver (6)
      • IT(개발아님) (46)
        • Windows (26)
        • MacOS (7)
        • Utility (11)
      • 챗봇 짬통 (0)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dism
    Workspace
    스프링
    제외
    citrix workspace
    스프링 프레임워크 핵심 기술
    vscode
    맥북 카카오톡 알림 안뜸
    그림판
    알림
    SFC
    윈도우
    windows
    KakaoTalk
    시스템 복구
    윈도우 명령어
    Windows 11
    SunOS 5.1
    백기선
    unix
    mspaint
    Solaris 10
    spring
    EXCLUDE
    java
    MacOS
    로지텍 마우스 제스처
    logi options
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
C++ 난수 생성 (Random Number Generation)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.