2010. 6. 14. 13:59 Programme
[C] Pseudorandom number generator
대충 인터넷 뒤져가면서 만든 녀석. 그럭저럭 잘 작동하는듯...
주의할 점은 첫 seed value로 0을 넣지는 말라는 것. 위쪽 알고리즘(LCG)은 문제없이 작동하더라도 아래쪽 알고리즘(LFSR)은 0이 들어가면 0만 나온다. -_-;;
#include "time.h"
unsigned long random(unsigned long i)//do not use 0 as seed
{
unsigned long random(unsigned long i)//do not use 0 as seed
{
if(i && time(0)%2)
return (unsigned long)(i>>1)|(((i^(i>>10)^(i>>30)^(i>>31))&1)<<31);
else return (unsigned long)(i*1103515245+12345)%0x100000000;
}
seed value로 0이 들어가도 되도록 수정. 대신에 순서가 바뀌었네...
Mersenne twister는 써보려고 했는데 너무 길어서 포기 -_-;;;
'Programme' 카테고리의 다른 글
Reversible Computation (0) | 2013.10.29 |
---|---|
[C] Entering strings including <space> (0) | 2010.09.11 |
[C] Conway's Game of Life (4) | 2010.06.25 |
C언어 달팽이(나선)배열 (7) | 2010.04.26 |