블로그는 귀차니즘

First Sensation
  • 공지
  • 지역로그
  • 태그
  • 방명록

더 이상 rand()는 필요없다?! - boost::random Number Library

Language 2008/03/12 22:18 귀차니스트
TraditionalRandom.c (Language : cpp)
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4.  
  5. int main( int argc, char **argv )
  6. {
  7.     srand(time(NULL) );
  8.    
  9.     for( int i = 0; i < 50; ++i )   {
  10.         printf( "%d\n", rand() % 6 + 1 );
  11.     }
  12.  
  13.     return 0;
  14. }

  위 구문이 익숙하시죠?? 보통 C/C++을 하시다가 어떠한 난수를 발생시키고자 할 때에 한 번쯤은 써보셨을 겁니다. 그런데 실질적으로 srand 라는 부분도 문제가 되고, % 연산자로 숫자의 범위를 만들어 주어야 하는 단점이 존재합니다. 그 뿐만 아니라 rand() 함수 자체가 short 형인 65536 까지 제한이 걸리다 보니 하고 싶은 작업에 있어서도 제한이 걸립니다. 그런데 역시라고 해야 될지 boost 에는 이런 문제를 해결 해놓은 라이브러리가 존재합니다. 바로 boost::random 입니다.

random.cpp (Language : cpp)
  1. #include <iostream>
  2. #include <boost/tr1/random.hpp>
  3.  
  4. int main( int argc, char **argv )
  5. {
  6.     //boost::minstd_rand    Random1;
  7.     //boost::minstd_rand0   Random2;
  8.     //boost::mt11213b      Random3;
  9.     boost::mt19937    Random4;
  10.  
  11.     boost::uniform_int<>    Six( 1, 6 );
  12.  
  13.     boost::variate_generator< boost::mt19937, boost::uniform_int<> > Dice( Random4, Six );
  14.  
  15.     for( int i = 0; i < 50; ++i )
  16.         std::cout << Dice() << std::endl;
  17.  
  18.    
  19.     return 0;
  20. }

  간단하게 보이죠?? mt19937 같은 부분은 난수발생엔진 부분이고 uniform_int 는 범위와 데이터 형태를 정의하는 부분입니다. varitate_generator 를 이용하여 해당 엔진을 typename 으로 하여 Dice 롤링을 하죠. 그 것을 바로 std::cout 을 이용해 출력하면 콘솔에서 제대로 출력됩니다. 1 ~ 6 의 숫자가 50번 동안 난발적으로 생성됩니다. 뿐만 아니라 boost::uniform_int 대신 boost::uniform_real를 사용하면 실수가 나옵니다. @0@ 많이 편하지 않나요^^. 사용할 곳이 많이 생길지도 모르겠네요.

크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Language" 분류의 다른 글

boost::spirit - Parser 라이브러리 (0)2008/04/23
std::ostreambuf_iterator, std::istreambuf_iterator의 이유 (1)2008/04/16
std::auto_ptr - Smart Pointer 이지만?? (1)2008/04/13
C# Application - Main 에서 Try-Catch 오작동 해결하는 방법 (4)2008/04/07
Boost 1.35 - 워크샵 뒤의 포스팅 (2)2008/04/03
2008/03/12 22:18 2008/03/12 22:18
TAG boost, boost::random, C++, 난수
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/32

댓글을 달아 주세요

◀ 이전페이지 1 다음페이지 ▶

블로그 이미지
First Sensation 귀차니스트
rss
  • 관리자
  • 글쓰기

카테고리

  • 전체 (108)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (9)
    • TopCoder (3)
    • Library (2)
    • Programming (19)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (29)
    • Document (4)

최근에 올라온 글

  • 한게임 자동테트리스 Ve....
  • Intel 64 And IA32 Arch.... (1)
  • 한게임 자동테트리스 Ve.... (18)
  • 재귀적 합성이랄지...
  • 또 오랜기간의 공백을....

최근에 달린 댓글

  • 오오~ 멋진데 :) 좋은 일 하.... kkamagui 11/17
  • .. 그렇군요;;.. 사실 뭐 저.... 귀차니스트 11/16
  • 고생은하셨다만.. 벌써 프로.... 뉴올리언스 11/16
  • 이 부분은 본문에 명시되어.... 귀차니스트 11/15
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 11/15

달력

«   2008/11   »
일 월 화 수 목 금 토
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

링크

  • kkamagui 프로그래밍 세상.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 궁극의 예외처리. 이름없는 블로그 05/16
  • Maximum sum. 티스토리 지점 04/09

글 보관함

  • 2008/11 (3)
  • 2008/10 (2)
  • 2008/09 (3)
  • 2008/08 (5)
  • 2008/07 (13)

태그목록

  • 상속
  • KDevelop
  • Sector
  • 이미지 프로세싱
  • iterator_traits
  • 개발
  • boost::random
  • Reference
  • 십자매
  • C#
  • Inheritance
  • Chaos
  • Image Processing
  • FTP
  • Freetype2
  • Run Length
  • AppWizard
  • ostreambuf_iterator
  • As 형 변환
  • SSD
  • 램
  • Rest
  • Codegear
  • Develope
  • 예외
  • ACM-ICPC
  • 관악기
  • OS
  • 개인정보유출
  • 1.35

지역로그 : 태그 : 방명록 : 관리자 : 글쓰기
귀차니스트’s Blog is powered by Textcube 1.7.5 : Risoluto / Designed by DesignNia.net