3월 31, 2016

C++ 11 이후 새로운 random 함수 표준

MT(Mersenne Twister 메르센 트위스터)

  • 유사 난수 생성기. 기존 생성기의 문제점을 피하며 매우 질이 좋은 난수를 빠르게 생성 가능.
  • 32bit(MT19937), 또는 64bit(MT19937_64) 크기의 난수 생성 가능.
  • 난수의 특성(주기, 난수의 범위 등)을 알고 있으면 그 뒤 나올 난수를 예측 가능하기 때문에 암호학적으로 안전한 생성기는 아님.
  • 예시1
  • 출력 화면
  • 예시2 - C++ 표준을 좀 더 다양하게 사용한 개선 코드
  • 출력 화면

WELL

  • MT의 개발자가 10년 후에 고안한 난수 발생 알고리즘.
  • MT보다 40% 가량 빠르며 코드도 더 간단하다고 함.
  • 분포도에 따라 WELLS512, WELLS1024, WELLS19947(숫자가 커질 수록 분포도↑) 등 다양한 종류가 존재.

references

댓글 2개:

  1. 2번째 예제에서 랜덤함수의 범위를 정해놓고 (std::uniform_int_distribution dist(0, 99);)
    왜 랜덤함수를 뽑을 때
    std::cout << std::setw(3) << generator()%100;

    100으로 나머지 연산을 해주신 건가요??
    나머지 연산을 안해도 범위에 맞게 생성 되네요

    답글삭제
  2. 작성자가 댓글을 삭제했습니다.

    답글삭제