rand()함수로는 0 ~ 2^31-1 범위의 값밖에 구해지지 않는데..
2^32-1 범위의 랜덤값을 구하려면 어떻게 해야합니다..
지금 임시방편으로 rand()값에 2를 곱해서 사용하고 있는데..석연하지 않네요.
rand() 에 *2 를 하는 것보다
rand() + rand() 로 두번 불러 더하는 것이 더 엔트로피가 높겠습니다.
---http://coolengineer.com
rand()에 2를 곱하면 짝수인 난수만 나오겠죠?
rand()를 여러 번 불러 그 bit 값을 포개 쓰면 됩니다. (uniform distribution이 되도록 잘 신경써서요.)
간단히는.. ((rand()*2) ^ (rand()))
rand 함수의 구현이 좋은 편이 아니니 이 방법을 바로 써도 되는지는 좀 미심쩍습니다. random() 함수로 이런 장난을 치면 어떨까요?
rand() 에 *2 를 하는 것보다 rand() + rand() 로 두번 불러 더하는 것이 더 엔트로피가 높겠습니다.
rand를 두 번 더하면 uniform 분포가 아닙니다. 쐐기 모양의 분포를 가지게 됩니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
rand() 에 *2 를 하는 것보다rand() + rand()
rand() 에 *2 를 하는 것보다
rand() + rand() 로 두번 불러 더하는 것이 더 엔트로피가 높겠습니다.
---
http://coolengineer.com
rand()에 2를 곱하면 짝수인 난수만 나오겠죠?rand()를
rand()에 2를 곱하면 짝수인 난수만 나오겠죠?
rand()를 여러 번 불러 그 bit 값을 포개 쓰면 됩니다. (uniform distribution이 되도록 잘 신경써서요.)
간단히는.. ((rand()*2) ^ (rand()))
rand 함수의 구현이 좋은 편이 아니니 이 방법을 바로 써도 되는지는 좀 미심쩍습니다. random() 함수로 이런 장난을 치면 어떨까요?
[quote="pynoos"]rand() 에 *2 를 하는 것보다
rand를 두 번 더하면 uniform 분포가 아닙니다. 쐐기 모양의 분포를 가지게 됩니다.
댓글 달기