맨위로가기

메르센 트위스터

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

메르센 트위스터는 선형 피드백 시프트 레지스터를 기반으로 하는 의사 난수 생성기이다. MT19937이 널리 사용되며, 매우 긴 주기, 높은 차원에서의 균등 분포, 빠른 속도 등의 장점을 가진다. 하지만 암호학적으로 안전하지 않고, 큰 내부 상태, 초기 상태에 따른 문제 등의 단점도 존재한다. 다양한 변형이 존재하며, 몬테카를로 시뮬레이션, 게임, 통계 분석 등 여러 분야에서 사용된다. 파이썬, C++, MATLAB 등 여러 프로그래밍 언어에서 기본 의사 난수 생성기로 사용되며, 대한민국에서도 과학 기술 및 게임 개발 등에서 널리 활용된다.

더 읽어볼만한 페이지

  • 유사난수 생성기 - RC4
    RC4는 로널드 라이베스트가 1987년에 설계한 스트림 암호 알고리즘으로, 과거 널리 사용되었으나 보안 취약점 때문에 현재는 안전하지 않은 암호로 간주된다.
  • 유사난수 생성기 - 선형 합동 생성기
    선형 합동 생성기는 초기값을 이용하여 선형 함수를 반복 적용해 의사 난수를 생성하는 간단하고 빠른 알고리즘이지만, 예측 가능성과 낮은 품질로 암호학적 용도나 고품질 난수 시뮬레이션에는 부적합하다.
  • 소수 - 소수 (수론)
    소수는 1과 자기 자신만을 약수로 가지는 1보다 큰 자연수이며, 무한히 많고 정수론의 기본 정리에서 중요한 역할을 하며 다양한 분야에 응용된다.
  • 소수 - 디리클레 L-함수
    디리클레 L-함수는 디리클레 지표로 정의되는 복소함수로, 등차수열에 대한 디리클레 정리를 증명하기 위해 도입되었으며, 리만 제타 함수의 일반화이자 오일러 곱, 함수 방정식 등의 성질을 가지며, 모듈러 형식, 타원 곡선과 관련되어 수론적 L-함수 연구의 핵심이고 암호론, 컴퓨터 과학 등에 응용된다.
메르센 트위스터
기본 정보
유형유사난수 생성기
설계자마쓰모토 마코토
니시무라 다쿠지
최초 발표1997년
기술 정보
주기2^19937 - 1 (메르센 소수)
상태 크기 (비트)19937
출력 크기 (비트)32 또는 64 (변형에 따라 다름)
알고리즘선형 피드백 시프트 레지스터 (LFSR)
구현 언어C
C++
자바
파이썬
매트랩
특징
장점긴 주기
양호한 균등성
빠른 생성 속도
단점암호학적으로 안전하지 않음
활용
사용 분야몬테카를로 방법
시뮬레이션
게임 개발
기타
변종MT19937
MT19937-64
SFMT (SIMD-oriented Fast Mersenne Twister)
참고 문헌Matsumoto, M.; Nishimura, T. (1998). "Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator". ACM Transactions on Modeling and Computer Simulation. 8 (1): 3–30. doi:10.1145/272991.272995. S2CID 3332028.
John Savard, The Mersenne Twister

2. 특징

메르센 트위스터는 선형 피드백 시프트 레지스터(LFSR)를 기반으로 하는 의사 난수 생성기이다. GFSR(Generalized Feedback Shift Register)을 꼬아서(Twisted) 조율(Tempered)하는 방식으로 작동한다.

메르센 트위스터의 특징은 다음과 같다.

'''장점'''


  • 관대한 라이선스를 따르며, CryptMT를 제외한 모든 변형에 특허가 없다.[13]
  • Diehard 테스트와 대부분의 TestU01 테스트(전부는 아님)를 포함하여 수많은 통계적 무작위성 테스트를 통과한다.[13]
  • 2^{19937}-1의 매우 긴 주기를 가진다. 이는 대부분의 프로그램에서 충분한 고유한 조합을 제공한다. 2^{19937}-1은 대략 4.315425 \times 10^{6001}이다. 다만, 긴 주기가 난수 생성기의 품질을 보장하는 것은 아니다. 많은 구형 소프트웨어 패키지에서 흔히 사용되는 2^{32}와 같은 짧은 주기는 문제가 될 수 있다.[14]
  • 623차원까지 동일분포되어 있다. 즉, 난수를 623개까지 짝지어서 623차원 하이퍼큐브에 해당하는 좌표에 점을 찍어도 일관성을 발견할 수 없으며, 따라서 연속된 숫자들 사이의 관계가 매우 낮다.
  • 일반적으로 하드웨어 구현 방식보다 난수를 더 빠르게 생성한다. 한 연구에 따르면 메르센 트위스터는 하드웨어로 구현된 프로세서 기반 RDRAND 명령어 세트보다 64비트 부동 소수점 난수를 약 20배 더 빠르게 생성한다.[15]


'''단점'''

  • TinyMT 변형을 사용하지 않는 한 약 2.5 kB의 비교적 큰 상태 버퍼를 사용한다.
  • SFMT 변형을 사용하지 않는 한 현대적인 기준에 비해 중간 수준의 처리량을 보인다.[16]
  • TestU01 스위트의 Crush 및 BigCrush에서 두 가지 명확한 실패(선형 복잡성)를 보인다. 이 테스트는 메르센 트위스터와 마찬가지로 \textbf{F}_2-대수를 기반으로 한다.[13]
  • 시드 값만 다르고 다른 매개변수는 동일한 여러 인스턴스는 독립적인 난수 생성기가 필요한 몬테카를로 시뮬레이션에 일반적으로 적합하지 않지만, 여러 매개변수 값 집합을 선택하는 방법이 존재한다.[17][18]
  • 낮은 확산성: 초기 상태가 매우 비무작위적인 경우, 특히 초기 상태에 0이 많은 경우 무작위성 테스트를 통과하는 출력을 생성하는 데 오랜 시간이 걸릴 수 있다. 이로 인해 거의 동일한 초기 상태로 시작된 두 개의 생성기 인스턴스는 결국 달라지기 전에 많은 반복 동안 거의 동일한 시퀀스를 출력한다. MT 알고리즘의 2002년 업데이트로 초기화가 개선되어 이러한 상태에서 시작할 가능성이 매우 낮아졌다.[19] GPU 버전(MTGP)이 훨씬 더 좋다고 한다.[20]
  • 1보다 0이 더 많은 하위 시퀀스를 포함한다. 이는 많은 제로 상태에서 복구를 어렵게 만드는 낮은 확산 특성에 추가된다.
  • CryptMT 변형을 사용하지 않는 한 암호학적으로 안전하지 않다. 그 이유는 충분한 수의 반복(MT19937의 경우 624개, 이는 향후 반복이 생성되는 상태 벡터의 크기이므로)을 관찰하면 모든 향후 반복을 예측할 수 있기 때문이다.

2. 1. 장점


  • 관대한 라이선스를 따르며, CryptMT를 제외한 모든 변형에 특허가 없다.[13]
  • Diehard 테스트와 대부분의 TestU01 테스트(전부는 아님)를 포함하여 수많은 통계적 무작위성 테스트를 통과한다.[13]
  • 219937-1의 매우 긴 주기를 가진다. 긴 주기가 난수 생성기의 품질을 보장하는 것은 아니지만, 많은 구형 소프트웨어 패키지에서 흔히 사용되는 232와 같은 짧은 주기는 문제가 될 수 있다.[14]
  • 모든 1 ≤ k ≤ 623 에 대해 32비트 정확도로 k-분포된다(''k''-분포의 정의는 아래 참조).
  • 일반적으로 하드웨어 구현 방식보다 난수를 더 빠르게 생성한다. 한 연구에 따르면 메르센 트위스터는 하드웨어로 구현된 프로세서 기반 RDRAND 명령어 세트보다 64비트 부동 소수점 난수를 약 20배 더 빠르게 생성한다.[15]

2. 2. 단점

메르센 트위스터는 다음과 같은 단점을 갖는다.

  • 암호학적으로 안전하지 않음: 메르센 트위스터는 선형 점화식에 의해 생성되므로 예측 가능하다. 따라서 암호학적 용도로는 사용할 수 없다.[61] CryptMT나 Fubuki는 메르센 트위스터를 기반으로 하지만, 단순히 그 출력을 키 스트림으로 평문과 합성하고 있는 것은 아니다.
  • 큰 내부 상태: MT19937은 2.5kB의 내부 상태를 필요로 한다. 이는 메모리가 제한된 환경에서는 단점이 될 수 있다. 개발자에 의한 구현에서는 32비트 버전에서 624워드 (2496바이트)의 워킹 메모리를 필요로 한다.[16]
  • 초기 상태에 따른 문제: 초기 상태에 0이 많으면 출력에도 0이 많아지는 경향이 있다. 이는 초기화 개선으로 완화될 수 있다. 개발자가 제공하는 구현에서는 초기화에 내부 상태 공간의 작은 의사 난수 생성계를 이용하고 있으므로(그 작음 때문에, 모두 0과 같은 열은 생성할 수 없으므로) 이는 문제가 되지 않는다. 독자적인 초기화 처리를 사용하는 경우에는 문제가 발생할 가능성이 있다.[19]
  • 선형 복잡성: TestU01의 BigCrush 테스트에서 실패한다. 이는 메르센 트위스터가 F2-대수를 기반으로 하기 때문이다.[13]

3. 알고리즘 상세

메르센 트위스터 알고리즘은 유한 이진\textbf{F}_2에 대한 행렬 선형 점화식을 기반으로 한다. 이 알고리즘은 상태 비트 반전과 템퍼링을 갖는 일반화된 피드백 시프트 레지스터(TGFSR)의 유리 정규형(TGFSR(R))이다.[4] 기본적인 아이디어는 간단한 점화식을 통해 일련의 x_i를 정의한 다음 x_i^T 형태의 숫자를 출력하는 것이다. 여기서 ''T''는 템퍼링 행렬이라고 하는 가역 \textbf{F}_2 행렬이다.

일반적인 알고리즘은 다음과 같은 수량으로 특징지어진다.


  • ''w'': 단어 크기(비트 수)
  • ''n'': 점화식의 차수
  • ''m'': 중간 단어, 계열 x를 정의하는 점화식에 사용되는 오프셋, 1 \le m < n
  • ''r'': 한 단어의 분리점, 또는 하위 비트마스크의 비트 수, 0 \le r \le w - 1
  • ''a'': 유리 정규형 꼬임 행렬의 계수
  • ''b'', ''c'': TGFSR(R) 템퍼링 비트마스크
  • ''s'', ''t'': TGFSR(R) 템퍼링 비트 시프트
  • ''u'', ''d'', ''l'': 추가적인 메르센 트위스터 템퍼링 비트 시프트/마스크


2^{nw-r}-1이 메르센 소수라는 제약 조건이 있다.

계열 x는 ''w'' 비트 수량의 계열로 다음과 같은 점화식을 갖는다.

: x_{k+n} := x_{k+m} \oplus \left( ({x_k}^u \mid {x_{k+1}}^l) A \right)\qquad k=0,1,2,\ldots

여기서 \mid는 비트 벡터의 연결(상위 비트는 왼쪽에 위치), \oplus는 비트 단위 배타적 논리합(XOR), x_{k}^{u}x_k의 상위 비트를 의미하고, x_{k+1}^{l}x_{k+1}의 하위 ''r'' 비트를 의미한다.

첨자는 모두 ''-n''만큼 오프셋될 수 있다.

: x_k := x_{k-(n-m)} \oplus \left( ({x_{k-n}}^u \mid {x_{k-(n-1)}}^l) A \right)\qquad k=n,n+1,n+2,\ldots

여기서 x_k는 이전에 생성된 값을 기준으로 계열에서 다음에 생성된 값이다.

꼬임 변환 ''A''는 유리 정규형으로 다음과 같이 정의된다.

:A = \begin{pmatrix} 0 & I_{w - 1} \\ a_{w-1} & (a_{w - 2}, \ldots , a_0) \end{pmatrix}

I_{w-1}(w-1)(w-1) 항등 행렬이다. 유리 정규형은 ''A''와의 곱셈을 효율적으로 표현할 수 있다는 이점이 있다. (여기서 행렬 곱셈은 \textbf{F}_{2}에서 수행되고 따라서 비트 단위 XOR이 덧셈을 대신한다)

:\boldsymbol{x}A = \begin{cases}\boldsymbol{x} \gg 1 & x_0 = 0\\(\boldsymbol{x} \gg 1) \oplus \boldsymbol{a} & x_0 = 1\end{cases}



여기서 x_0x의 최하위 비트이다.

TGFSR(R)과 마찬가지로, 메르센 트위스터는 템퍼링 변환과 함께 연결되어 등분포의 차원 감소를 보상한다. 이는 가역 행렬 ''T''에 대해 A = T^{-1}*AT인 행렬 ''A''를 사용하는 것과 같다.

''A''와 마찬가지로, 템퍼링 변환을 쉽게 계산할 수 있도록 선택하여 실제로 ''T'' 자체를 구성하지 않는다. 이 템퍼링은 메르센 트위스터의 경우 다음과 같이 정의된다.

:

\begin{aligned}

y &\equiv x \oplus ((x\gg u)~\And~d)\\

y &\equiv y \oplus ((y\ll s)~\And~b)\\

y &\equiv y \oplus ((y\ll t)~\And~c)\\

z &\equiv y \oplus (y\gg l)

\end{aligned}



여기서 x는 계열의 다음 값이고, y는 임시 중간 값이며, z는 알고리즘에서 반환된 값이며, \ll\gg는 비트 단위 좌우 시프트이고, \&는 비트 단위 AND이다. 첫 번째 및 마지막 변환은 하위 비트 등분포를 개선하기 위해 추가된다.

MT19937의 계수는 다음과 같다.

변수
w, n, m, r32, 624, 397, 31
a9908B0DF16
u, d11, FFFFFFFF16
s, b7, 9D2C568016
t, c15, EFC6000016
l18



메르센 트위스터의 32비트 구현은 일반적으로 ''d'' = FFFFFFFF16을 갖는다.

MT19937-64의 계수는 다음과 같다.[5]

변수
w, n, m, r64, 312, 156, 31
aB5026F5AA96619E916
u, d29, 555555555555555516
s, b17, 71D67FFFEDA6000016
t, c37, FFF7EEE00000000016
l43


4. k-분포

주기 ''P''의 ''w''비트 정수로 구성된 의사 난수 시퀀스 x_i가 특정 조건을 만족하면 ''v''비트 정확도로 ''k-분포''되었다고 한다.

trunc''v''(''x'')를 ''x''의 선두 ''v''비트로 구성된 수라고 할 때, 다음 ''k''개의 ''v''비트 벡터 ''P''개를 고려한다.

: (\operatorname{trunc}_v(x_i), \operatorname{trunc}_v(x_{i+1}), \, \ldots, \operatorname{trunc}_v(x_{i+k-1})) \quad (0\leq i< P) .

그러면 2^{kv}개의 가능한 비트 조합 각각이 한 주기 동안 동일한 횟수로 나타나며, 단, 모든 0 조합은 한 번 덜 나타난다.[13]

5. 변형

메르센 트위스터에는 여러 변형이 존재하며, 각각 다른 특성을 가진다.


  • MT19937: 가장 널리 사용되는 메르센 트위스터 변형이다. 32비트 정수를 생성하며, 주기는 2^{19937}-1이다. 623차원까지 동일분포되어 있으며, 다이하드 테스트를 통과한다. 그러나 암호학적으로 안전하지 않으며, 초기 상태 초기화에 문제가 있을 수 있다.[4] MT19937의 계수는 다음과 같다.


변수
w (단어 크기)32
n (점화식 차수)624
m (중간 단어)397
r (분리점)31
a9908B0DF|0x9908B0DF영어
u, d11, FFFFFFFF|0xFFFFFFFF영어
s, b7, 9D2C5680|0x9D2C5680영어
t, c15, EFC60000|0xEFC60000영어
l18


  • MT19937-64: MT19937의 64비트 변형으로, 64비트 정수를 생성한다. 주기는 MT19937과 동일하며, 623차원 동일분포 등의 특성을 가진다.[5] MT19937-64의 계수는 다음과 같다.


변수
w (단어 크기)64
n (점화식 차수)312
m (중간 단어)156
r (분리점)31
aB5026F5AA96619E9|0xB5026F5AA96619E9영어
u, d29, 5555555555555555|0x5555555555555555영어
s, b17, 71D67FFFEDA60000|0x71D67FFFEDA60000영어
t, c37, FFF7EEE000000000|0xFFF7EEE000000000영어
l43


  • CryptMT: 메르센 트위스터를 기반으로 하는 스트림 암호이자 암호학적으로 안전한 의사 난수 생성기(CSPRNG)이다.[6][7] eCRYPT 네트워크의 eSTREAM 프로젝트에 제출되었으며, 소프트웨어 특허를 받았다.[6]

  • SFMT (SIMD-oriented Fast Mersenne Twister): SIMD 연산을 활용하여 고속화를 꾀한 변형이다.[9] 128비트 SIMD에서 빠르게 작동하며, 메르센 트위스터보다 약 2배 빠르다.[10] 또한, v-비트 정확도의 균등분포 속성이 개선되었으며, 초기 상태의 제로 과잉으로부터 더 빠르게 복구된다.[10] 2607 − 1에서 2216091 − 1까지 다양한 주기를 지원하며, 인텔 SSE2 및 PowerPC AltiVec를 지원한다. PlayStation 3의 Cell BE를 사용하는 게임에도 사용된다.[11]

  • TinyMT: 상태 공간을 127비트로 줄인 변형이다.[12] 메모리 사용량이 적지만, 주기가 2^{127}-1로 짧기 때문에 메모리가 부족한 경우에만 사용하는 것이 좋다.

6. 응용

메르센 트위스터는 몬테카를로 시뮬레이션, 게임, 통계 분석 등 다양한 분야에서 사용된다. 여러 프로그래밍 언어 및 소프트웨어에서 기본 의사 난수 생성기(PRNG)로 사용되고 있다. 사용되는 곳은 다음과 같다.

분야사용처
프로그래밍 언어Dyalog APL, IDL, R, Ruby, Free Pascal, PHP, Python (NumPy에서도 사용 가능), CMU Common Lisp, Embeddable Common Lisp, Steel Bank Common Lisp, Julia
Unix 계열 라이브러리 및 소프트웨어GLib, GNU Multiple Precision Arithmetic Library, GNU Octave, GNU Scientific Library
기타Microsoft Excel, GAUSS, gretl, Stata, SageMath, Scilab, Maple, MATLAB



Apache Commons, 표준 C++(C++) 라이브러리 (C++11부터), 및 Mathematica에서도 사용할 수 있다. Boost C++ Libraries, CUDA 라이브러리 및 NAG Numerical Library를 포함한 많은 프로그램 라이브러리에서 추가 구현이 제공된다.

SPSSSAS에서도 PRNG 중 하나로 사용된다. Stata의 기본 PRNG이다.

7. 대안

WELL은 메르센 트위스터보다 더 빠른 회복 속도, 동등한 무작위성을 제공한다.[57]

마르살리아의 Xorshift 생성기와 그 변형은 LFSR 클래스에서 가장 빠르다.[58]

PCG 계열은 캐시 지역성이 더 좋고, 현대적인 분석 방법을 사용했을 때 감지 가능한 편향이 적은 보다 현대적인 장주기 생성기이다.[60]

8. 기타

도널드 커누스가 "이름이 너무 길다"라고 지적하여 현재 이름으로 변경되었다. 'MT'는 개발자 마츠모토 마코토와 니시무라 타쿠지의 이니셜을 의미하기도 한다.

참조

[1] 간행물 Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator https://dl.acm.org/d[...]
[2] 서적 Machine Learning CRC Press
[3] 웹사이트 The Mersenne Twister http://www.quadibloc[...]
[4] 간행물 Twisted GFSR generators http://ir.lib.hirosh[...]
[5] 웹사이트 std::mersenne_twister_engine http://en.cppreferen[...] 2015-07-20
[6] 웹사이트 CryptMt and Fubuki https://web.archive.[...] eCRYPT 2017-11-12
[7] 웹사이트 Cryptographic Mersenne Twister and Fubuki Stream/Block Cipher http://eprint.iacr.o[...]
[8] arXiv Variants of Mersenne Twister Suitable for Graphic Processors
[9] 웹사이트 SIMD-oriented Fast Mersenne Twister (SFMT) http://www.math.sci.[...] 2015-10-04
[10] 웹사이트 SFMT:Comparison of speed http://www.math.sci.[...] 2015-10-04
[11] 웹사이트 PlayStation3 License http://www.scei.co.j[...] 2015-10-04
[12] 웹사이트 Tiny Mersenne Twister (TinyMT) http://www.math.sci.[...] 2015-10-04
[13] 문서 TestU01: "A C library for empirical testing of random number generators" http://www.iro.umont[...]
[14] 문서 Note: 219937 is approximately 4.3 × 106001; this is many orders of magnitude larger than the estimated number of particles in the observable universe, which is 1087.
[15] 간행물 Radio-flaring Ultracool Dwarf Population Synthesis 2017-08-10
[16] 웹사이트 SIMD-oriented Fast Mersenne Twister (SFMT): twice faster than Mersenne Twister http://www.math.sci.[...] 2017-03-27
[17] 웹사이트 Dynamic Creation of Pseudorandom Number Generators http://www.math.sci.[...] 2015-07-19
[18] 웹사이트 Efficient Jump Ahead for F2-Linear Random Number Generators http://www.iro.umont[...] 2015-11-12
[19] 웹사이트 mt19937ar: Mersenne Twister with improved initialization http://www.math.sci.[...] 2015-10-04
[20] 간행물 Pseudo-Random Number Generators for Vector Processors and Multicore Processors 2015-05-01
[21] 웹사이트 Random link http://help.dyalog.c[...] 2020-06-04
[22] 웹사이트 RANDOMU (IDL Reference) http://www.exelisvis[...] 2013-08-23
[23] 웹사이트 Random Number Generators https://cran.r-proje[...] 2012-05-29
[24] 웹사이트 "Random" class documentation http://www.ruby-doc.[...] 2012-05-29
[25] 웹사이트 random http://www.freepasca[...] 2013-11-28
[26] 웹사이트 mt_rand — Generate a better random value http://php.net/manua[...] 2016-03-02
[27] 웹사이트 NumPy 1.17.0 Release Notes — NumPy v1.21 Manual https://numpy.org/do[...] 2021-06-29
[28] 웹사이트 9.6 random — Generate pseudo-random numbers https://docs.python.[...] 2012-05-29
[29] 웹사이트 8.6 random — Generate pseudo-random numbers https://docs.python.[...] 2012-05-29
[30] 웹사이트 random — Generate pseudo-random numbers — Python 3.8.3 documentation https://docs.python.[...] 2020-06-23
[31] 웹사이트 Design choices and extensions http://common-lisp.n[...] 2014-02-03
[32] 웹사이트 Random states https://common-lisp.[...] 2015-09-20
[33] 웹사이트 Random Number Generation http://www.sbcl.org/[...]
[34] 웹사이트 Random Numbers · The Julia Language https://docs.juliala[...] 2022-06-21
[35] 웹사이트 Random Numbers: GLib Reference Manual https://developer.gn[...]
[36] 웹사이트 Random Number Algorithms http://gmplib.org/ma[...] 2013-11-21
[37] 웹사이트 16.3 Special Utility Matrices https://www.gnu.org/[...]
[38] 웹사이트 Random number environment variables https://www.gnu.org/[...] 2013-11-24
[39] 간행물 On the accuracy of statistical procedures in Microsoft Excel 2010
[40] 웹사이트 GAUSS 14 Language Reference http://www.aptech.co[...]
[41] 문서 uniform http://gretl.sourcef[...] Gretl Function Reference
[42] 웹사이트 New random-number generator—64-bit Mersenne Twister https://www.stata.co[...]
[43] 웹사이트 Probability Distributions — Sage Reference Manual v7.2: Probablity http://doc.sagemath.[...]
[44] 웹사이트 grand - Random numbers https://help.scilab.[...]
[45] 웹사이트 random number generator http://www.maplesoft[...] 2013-11-21
[46] 웹사이트 Random number generator algorithms http://www.mathworks[...]
[47] 웹사이트 Data Generation http://commons.apach[...]
[48] 웹사이트 Random Number Generation in C++11 https://isocpp.org/f[...]
[49] 웹사이트 std::mersenne_twister_engine http://en.cppreferen[...] 2012-09-25
[50] 문서 Mathematica Documentation http://reference.wol[...]
[51] 웹사이트 boost/random/mersenne_twister.hpp http://www.boost.org[...] 2012-05-29
[52] 웹사이트 Host API Overview http://docs.nvidia.c[...] 2016-08-02
[53] 웹사이트 G05 – Random Number Generators http://www.nag.co.uk[...] 2012-05-29
[54] 웹사이트 Random Number Generators http://pic.dhe.ibm.c[...] 2013-11-21
[55] 웹사이트 Using Random-Number Functions http://support.sas.c[...] 2013-11-21
[56] 문서 set rng -- Set which random-number generator (RNG) to use https://www.stata.co[...] Stata help
[57] 서적 Uniform Random Number Generators Springer-Verlag
[58] 웹사이트 xorshift*/xorshift+ generators and the PRNG shootout http://prng.di.unimi[...]
[59] 논문 Implementing 64-bit Maximally Equidistributed F2-Linear Generators with Mersenne Prime Period https://github.com/s[...] 2018
[60] 웹사이트 The PCG Paper https://www.pcg-rand[...] 2017-07-27
[61] 웹사이트 アーカイブされたコピー http://www.suspekt.o[...] 2008-10-17
[62] 웹사이트 9.6 random — Generate pseudo-random numbers http://docs.python.o[...] 2012-05-29
[63] 웹사이트 8.6 random — Generate pseudo-random numbers http://docs.python.o[...] 2012-05-29
[64] 웹사이트 "Random" class documentation http://www.ruby-doc.[...] 2012-05-29
[65] 웹사이트 Random Number Generators http://cran.r-projec[...] 2012-05-29
[66] 웹사이트 mt_srand http://php.net/manua[...] 2012-05-29
[67] 웹사이트 std::mersenne_twister_engine http://en.cppreferen[...] 2012-09-25
[68] 문서 http://help.sap.com/[...]
[69] 문서 http://flashexperime[...]
[70] 문서 AS3-Utilities/Random.as at master · skyboy/AS3-Utilities · GitHub https://github.com/s[...]
[71] 웹사이트 http://adrianhoe.com[...]
[72] 웹사이트 Pseudo random number generators https://www.agner.or[...]
[73] 웹사이트 Mersenne Twist PRNG https://www.cs.hmc.e[...]
[74] 웹사이트 http://www.mrpt.org/[...]
[75] 웹사이트 RandomLib http://randomlib.sou[...]
[76] 웹사이트 Mersenne Twister in Clojure – hackinghat.com http://www.hackingha[...]
[77] 웹사이트 http://clean.cs.ru.n[...]
[78] 웹사이트 http://adam.ierymenk[...]
[79] 웹사이트 http://code.msdn.mic[...]
[80] 웹사이트 Mersenne Twister https://cliki.net/Me[...]
[81] 웹사이트 phobos/random.d at master · dlang/phobos · GitHub https://github.com/D[...]
[82] 웹사이트 GitHub - jj1bdx/sfmt-erlang: sfmt-erlang: SIMD-oriented Fast Mersenne Twister (SFMT) for Erlang https://github.com/j[...]
[83] 웹사이트 mt.zip https://www.rapideup[...]
[84] 웹사이트 Excel Random Generator based on Mersenne Twister - NtRand https://www.ntrand.c[...]
[85] 웹사이트 http://www.falvotech[...]
[86] 웹사이트 http://theo.phys.sci[...]
[87] 웹사이트 Mersenne Twister - Pastebin.com https://pastebin.com[...]
[88] 웹사이트 GSL - GNU Scientific Library - GNU Project - Free Software Foundation https://www.gnu.org/[...]
[89] 웹사이트 http://www.augustsso[...]
[90] 웹사이트 mersenne-random-pure64: Generate high quality pseudorandom numbers purely using a Mersenne Twister https://hackage.hask[...]
[91] 웹사이트 Sean Luke : Code https://cs.gmu.edu/~[...]
[92] 웹사이트 Mersenne Twister in Java Script http://www.math.sci.[...]
[93] 웹사이트 a Mersenne Twister implementation in javascript. Makes up for Math.random() not letting you specify a seed value. · GitHub https://gist.github.[...]
[94] 웹사이트 Luiz Henrique de Figueiredo: Libraries and tools for Lua https://web.tecgraf.[...]
[95] 웹사이트 http://www.mitrionic[...]
[96] 웹사이트 http://www.wolfgang-[...]
[97] 웹사이트 'Search for "module:Math::Random::MT::Auto" - metacpan.org' https://metacpan.org[...]
[98] 웹사이트 Pure-PHP Mersenne Twister https://kingfisher.n[...]
[99] 웹사이트 R: Random Number Generation https://stat.ethz.ch[...]
[100] 웹사이트 Mersenne twister https://web.archive.[...]
[101] 웹사이트 http://mlton.org/cgi[...]
[102] 웹사이트 http://www.simul8.co[...]
[103] 웹사이트 Mersenne Twister - Random number generator · GitHub https://gist.github.[...]
[104] 웹사이트 http://www.quantcode[...]
[105] 웹사이트 Mersenne Twister in BASIC http://www.math.sci.[...]
[106] 논문 Mersenne twister: a 623-dimensionally equidistributed uniform pseudorandom number generator http://doi.acm.org/1[...] 1998



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com