General purpose random number generation에 의해 영감을 받았습니다. rand()에서 잘못된 점을보기 위해 자체 테스트를 수행하기로 결정했습니다. 이 프로그램을 사용 :rand()는 실제로 그렇게 나쁜가요?
srand(time(0));
for (int i = 0; i < 1000000; ++i)
{
std::cout << rand() % 1000 << " ";
}
는 내가 명령을 사용하여 옥타브에 그것을로드 :
S = load("test.txt")
hist(S)
을 그리고이 결과를 가지고 : 결과가 꽤 것 같다 나에게
을 제복. 나는 결과가 더 비뚤어 질 것으로 예상했다. 나는 시험을 잘못 했습니까?
rand는 주로 다음과 같은 이유로 좋지 않습니다.'RAND_MAX'는 구현이 정의되어 있으며, 예를 들어 Visual Studio에서는 단지 2^16입니다. rand는 전역 적입니다. 즉, 다른 사람이 srand를 호출하면 코드가 엉망이 될 수 있습니다. C++ 11- 컴파일러 컴파일러를 사용하는 경우, RNG 중 하나를 사용하는 것을 고려하십시오. – Creris
구현에 따라'rand()'는 하위 비트에서 낮은 엔트로피를 가질 수 있습니다. 'rand() % 4'을했다면, 약간의 구현에서 이것은 꽤 비 균일합니다. 그래서이 경우'rand()/(RAND_MAX/4) '를 쓰는 것이 보통 ('rand()'를 사용한다면) 추천된다. – leemes
* rand()가 실제로 그렇게 나쁜가요? * 예! –