프로젝트에서 Mersenne Twister 난수 생성기를 구현하려고합니다. 그러나 임베디드 응용 프로그램 용이므로 나중에 아키텍처 용 코드를 최적화 할 예정입니다. 그러나 코드 작동 방식에 대한 문서는 거의 찾을 수 없으며 pixie 먼지 및 마술이 아닌 것으로 거의 확신합니다. 내가 간과하고있는 좋은 문서가 있는가? 플로우 차트가 좋을 것입니다. 만약 아니라면 누군가 알고리즘에 대한 단계별 설명을 줄 수 있다면 고맙겠습니다. 감사!Mersenne Twister 알고리즘에 대한 설명
-1
A
답변
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);
}
0
Mersenne Twister site에 나와 있습니다. Wikipedia에서 압축 된 설명을 찾을 수도 있습니다.
관련 문제
- 1. 임의의 수의 스레드에 대한 CUDA의 Mersenne Twister
- 2. Java와 matlab의 Mersenne Twister 비교
- 3. array_rand는 Mersenne Twister 알고리즘을 사용합니까?
- 4. C++ Mersenne Twister 및 난수 lib
- 5. SFMT와 Mersenne Twister 및 Ran2의 비교
- 6. mersenne twister :: seed (C++)에 대한 인수가 잘못되었습니다.
- 7. Kameda-Weiner 알고리즘에 대한 설명?
- 8. 중앙값의 메디안 알고리즘에 대한 설명
- 9. 부스터 Mersenne Twister : 두 개 이상의 값으로 시드하는 방법?
- 10. ukkonen의 편집 거리 알고리즘에 대한 설명
- 11. 함수 내에서 Mersenne Twister를 실행하는 방법은 무엇입니까?
- 12. Aircrack-ng 알고리즘에 대한 설명 - WPA2-PSK 크래커
- 13. boost C++에서 Mersenne Twister 알고리즘을 사용하여 0과 1 사이에서 동일한 난수를 생성합니까?
- 14. std :: mt19937 mersenne 트위스터 분포가 아닌 반복 값
- 15. 알고리즘에 대한 메트릭
- 16. 캐시 알고리즘에 대한 것
- 17. A * 알고리즘에 대한 추론
- 18. 알고리즘에 대한 병렬 검색
- 19. 재귀 알고리즘에 대한 생각
- 20. 알고리즘에 대한 증명 작성
- 21. 알고리즘에 대한 팁이 필요합니다
- 22. 알고리즘에 대한 약간의 힌트
- 23. 닫기 Twitty Twister Stream
- 24. minmax 알고리즘에 대한 의사 코드
- 25. fft 알고리즘에 대한 벤치마킹 접근법
- 26. 알고리즘에 대한 Big O 표기법
- 27. AdaBoost 알고리즘에 대한 교육 세트
- 28. std :: inner_product 알고리즘에 대한 대안?
- 29. RSA 패딩 알고리즘에 대한 질문
- 30. 압축 알고리즘에 대한 아이디어 필요