응용프로그램에서는 흔히 srand(time) 즉 랜덤함수 api 를 써서 랜덤값을 만든다


이것은 rand() 함수에 시간값 (jiffies) 를 시드값으로 넣어서 나온값이다


단점이 있다


jiffies 시간값은 10ms 또는 4ms 에 한번씩 변경된다


즉 그 시간안에 rand() 함수를 실행하면 같은값이 나온다


또한 기본적은 rand() 의 코드는 다양한 난수를 만든다기엔 부족함이 있다

난수분포도가 치우쳐져 있기 때문이다


이것은 rand() 함수가 선형합동법을 쓰는데 선형합동법의 한계이기 때문이다






그리고 메르센 트위스터 기법이 있는데 rand()에 적용된 선형합동법보다 난수분포도가 높고 빠르다고 인정받은 표준이다


개발자들은 rand() 대신 mt_rand () 를 이용하면 된다





그리고 XOR 시프트가 있는데 XOR 과 시프트 연산으로 숫자를 지지고 볶아서 매번 불규칙한 난수로 만들어 내는 거다


시드값이 1만 증가했을 뿐인데 매번 불규칙한 엉뚱한 난수가 나온다


이를 개량시킨 알고리즘들이 많이 나와서 외국에서 좋다는 알고리즘을 가져와서 나름대로 존나게 개조해봤다



난수분포도를 보니 성능은 매우 만족스러웠다


xor shift 의 라이브러리 정식지원은 없는것 같지만 코드가 매우 간단하고 널리 퍼져있으니


함수로 만들어서 난수가 필요할때 가져다 쓰는것도 좋을것 같다