2011-07-28 1 views
2

몬테카를로 시뮬레이션을 C++로 만들고 있는데, 난수에 부스트를 사용하고있었습니다. 나는 GSL도 약간 사용했다. 하지만 무작위 번호 생성은 가장 큰 런타임 비효율 중 하나임이 밝혀 졌으므로 방금 에서 좋은 오래된 rand()을 사용하기 시작했습니다.stdlib.h에서 얼마나 나쁜 rand입니까?

시뮬레이션에서 난수 속성이 좋지 않게 나타날 위험이 있습니까? 10^6 또는 10^7 난수 샘플을 사용합니다.

+0

게시하기 전에 [* about-rand- *] (http://stackoverflow.com/questions/328950/c-the-definitive-truth-about-rand-random-and-arc4random)에서 답변을 읽었습니까? :?) 특히 Martin v. Löwis의 대답은 세부 사항을 산출합니다. 'period of rand.c '라는 간단한 구글 질의가 첫 번째 페이지에 나타났습니다. 불쌍한 구현과 최소한 32767이 될 수있는 범위에서 10^6 숫자를 고르는 것은 실제로 내 첫 번째 선택이되지 않습니다. 이 메르 센 - 트위스터 구현은 어떻게 되었습니까? 속도와 장기간에 좋은 타협이 아니 었나요? – Dilettant

답변

0

두 가지 문제가 있습니다. (1) RAND_MAX가 32767 이상으로 만 보장 될 수 있기 때문에 가능한 값이 많지 않을 수 있으며 (일부 응용 프로그램의 경우 반드시 나쁜 것은 아님) (2) 구현이 잘못되었습니다.

안전한 난수 생성기가 필요한 경우 다른 곳을 찾아야합니다. 하지만 많은 앱에서 rand()이면 충분합니다.

귀하의 우려 사항을 해결하는 블로그 게시물은 http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx입니다.