2013-06-14 4 views
-1

프로젝트에서 Mersenne Twister 난수 생성기를 구현하려고합니다. 그러나 임베디드 응용 프로그램 용이므로 나중에 아키텍처 용 코드를 최적화 할 예정입니다. 그러나 코드 작동 방식에 대한 문서는 거의 찾을 수 없으며 pixie 먼지 및 마술이 아닌 것으로 거의 확신합니다. 내가 간과하고있는 좋은 문서가 있는가? 플로우 차트가 좋을 것입니다. 만약 아니라면 누군가 알고리즘에 대한 단계별 설명을 줄 수 있다면 고맙겠습니다. 감사!Mersenne Twister 알고리즘에 대한 설명

답변

0

실제 설명을하기 위해서는 수학 학위를 받기 위해 몇 년이 걸릴 것입니다.하지만 주 표준 코드의 버전을 ojrandlib에서 얻을 수 있습니다.이 코드는 인터넷에서 찾을 수있는 대부분의 것보다 간단합니다. . 내 구조 g 발전기 상태 보유 : g->state는 MT 상태 벡터 자체를 g->buf 반환 된 랜덤 비트의 출력 버퍼는 다음

메르 센 트위스터 난수 발생기 뒤에 알고리즘 논문들이있다
int i, j, k, n = g->statesize; 
uint32_t y, m, *s = g->state, *bp = g->buf + g->bufsize; 

for (i = 0; i < n; ++i) { 
    j = i + 1;  if (j >= n) j -= n; 
    k = i + 397; if (k >= n) k -= n; 

    m = (s[j] & 1) ? 0x9908b0df : 0; 
    s[i] = m^s[k]^(((s[i] & 0x80000000) | (s[j] & 0x7FFFFFFF)) >> 1); 
} 
for (i = 0; i < n; ++i) { 
    y = s[i]^(s[i] >> 11); 
    y ^= (y << 7) & 0x9d2c5680U; 
    y ^= (y << 15) & 0xefc60000U; 
    *--bp = y^(y >> 18); 
} 
관련 문제