Вихор Мерсенна (англ. Mersenne twister, MT) — генератор псевдовипадкових чисел (ГПВЧ), розроблений 1997 року японськими вченими Макото Мацумото (яп. 松本 眞) і Такудзі Нісімурою (яп. 西村 拓士). Вихор Мерсенна ґрунтується на властивостях простих чисел Мерсенна (звідси й назва) і забезпечує швидке генерування високоякісних за критерієм випадковості псевдовипадкових чисел.
Вихор Мерсенна позбавлений багатьох недоліків, властивих іншим ГПВЧ, таких як малий період, передбачуваність, легко відшукувані статистичні закономірності.
Проте, цей генератор не є криптостійким, що обмежує його використання в криптографії.
Існують принаймні два загальних варіанти алгоритму, що відрізняються тільки величиною використовуваного простого числа Мерсенна, найпоширенішим з яких є алгоритм MT19937, період якого становить 219937 — 1 (приблизно 4,3·106001).
Властивості
Вихор Мерсенна є витковим регістром зсуву з узагальненою віддачею (TGFSR) (англ. twisted generalised feedback shift register). «Вихор» — це перетворення, яке забезпечує рівномірний розподіл генерованих псевдовипадкових чисел у 623 вимірах (для лінійних конгруентних генераторів його обмежено 5 вимірами). Тому функція кореляції між двома послідовностями вибірок у вихідній послідовності вихору Мерсенна мізерно мала.
Псевдовипадкова послідовність, породжена вихором Мерсенна, має дуже великий період, рівний числу Мерсенна, чого більш ніж достатньо для багатьох практичних застосувань.
Існують ефективні реалізації вихору Мерсенна, що перевершують за швидкістю багато стандартних ГПВЧ (зокрема, в 2-3 рази швидше від лінійних конгруентних генераторів). Алгоритм вихору Мерсенна реалізовано в програмній бібліотеці Boost, Glib і стандартних бібліотеках для , Python, Ruby, R, PHP, MATLAB, Autoit.
Видавані вихором Мерсенна послідовності псевдовипадкових чисел успішно проходять статистичні тести Diehard, що підтверджує їхні хороші статистичні властивості.
Генератор не призначений для отримання криптографічно стійких випадкових послідовностей чисел. Для забезпечення криптостійкості вихідну послідовність генератора слід обробити одним із криптографічних алгоритмів хешування.
K-розподіл
Запропоновано багато генераторів можливо «високої якості», але тільки деякі можна використати для серйозного моделювання через відсутність чіткого поняття «хаотичності» для генераторів псевдовипадкових чисел, оскільки кожен дослідник концентрується на конкретних параметрах хаотичності. Серед багатьох відомих мір, тести, засновані на вищому рівномірному розподілі, такі як спектральний тест і тест на k-розподілі, описаний нижче, вважаються найсильнішими.
Визначення
Кажуть, що псевдовипадкова послідовність xi з періодом P, що складається з w-бітових цілих, має k-розподіл з v-бітовою точністю, якщо вона задовольняє такій умові: Нехай truncv(x) — число, утворене першими v бітами послідовності xi, розглянемо P з k v-бітових векторів вигляду . Тоді кожна з 2kv можливих комбінацій бітів зустрічається рівне число разів, за винятком комбінації, що складається повністю з нулів, яка зустрічається на один раз менше.
Геометрична інтерпретація
Для кожного v = 1, 2,., w, нехай k(v) — найбільше число, таке, що послідовність є k-розподіленою з v-бітовою точністю. Поділимо кожне ціле xi на 2w для нормалізації в псевдовипадкове дійсне число xi з інтервалу [0, 1]. Помістимо P точок в k-вимірний куб з координатами (xi, xi+1…, xi+k-1)(i = 0, 1,…, P-1) для всього періоду. Кожна з осей даного k-вимірного куба поділена на 2v інтервалів. Таким чином, ми поділили куб на 2kv малих кубів. Послідовність є k-розподіленою з v-бітовою точністю, якщо кожен малий куб містить рівне число точок, крім куба в початку координат, який містить на одну точку менше. Отже, чим вище k(v) для кожного v, тим більше вимірів матиме розподіл з v-бітовою точністю. Під тестом на k-розподіл будемо розуміти отримання значень k(v).
Опис
x позначатимемо w-вимірні вектори над полем = {0,1}, відповідні машинним словам розміру w. Вихор Мерсенна генерує послідовність векторів, які є псевдовипадковими цілими з діапазону від 0 до 2w — 1. Діленням на 2w — 1 можна також отримати псевдовипадкове дійсне число з діапазону [0,1].
Алгоритм ґрунтується на такій рекурентній формулі:
де:
- n — ціле, яке позначає порядок рекурентності,
- m — ціле, 1 ≤ m < n,
- A — матриця розміру w×w, з елементами з ,
- — побітове АБО (OR),
- — додавання за модулем два (XOR).
У правій частині xku позначає «старші w-r біт» xk і xk+1l «молодші r біт» xk+1. Вектор (xku | xk+1l) є конкатенацією старших w-r біт xk і молодших r біт xk+1. Взявши (x0, x1,…, xn-1) для початкового заповнення. Тоді генератор обчислить xn за рекурентним виразом при k= 0. Для k = 1,2,…, генератор обчислить xn+1, xn+2,… Форму матриці A обрано з розрахунку швидкості виконання множення на A:
І обчислення xA зводиться до побітових операцій:
де
Неповні масиви
Послідовність МТ (xk+n, xk+n-1,…, xk+1u) утворює (n × w — r)-масив. Оскільки r бітів відкидаються, масив називають неповним масивом. Кожен елемент отримано з рекурентного співвідношення (1). Зміна стану MT також відбувається за лінійним співвідношенням і визначається за допомогою лінійного перетворення B.
Відповідно до загальної теорії лінійних рекурентних послідовностей, кожне значення в (n × w − r)-масиві є лінійною рекурентною послідовністю, що відповідає характеристичному многочлену φB(t) перетворення B. Матриця B має розміри (n × w − r) × (n × w − r) і таку форму:
де — одинична матриця розміру r × r.
Для виконується .Характеристичний многочлен φB(t) перетворення B має вигляд:
Послідовність досягає максимального періоду 2(nw-r)−1, тоді і тільки тоді коли φB(t) — примітивний.
Загартування
Необроблені послідовності, що генеруються рекурсією (1), мають поганий рівномірний розподіл на великих розмірностях. Щоб це виправити, використовується метод загартування (англ. tempering), на виході якого отримують кінцеву псевдовипадкову послідовність. Метод полягає в тому, що кожне згенероване слово множиться праворуч на спеціальну оборотну матрицю T розміром w×w. Для матриці T: x → z = x T, вибрано такі послідовні перетворення:
- y := x ⊕ (x >> u)
- y := :y ⊕ ((y << s) & b)
- y := :y ⊕ ((y << t) & c)
- z := y ⊕ (y >> l)
де l, s, t і u — цілі, а b і c — спеціально підібрані бітові маски розміру слова, і (x≫u) позначає побітову операцію зсуву вправо на u бітів.
Алгоритм
Вихор Мерсенна алгоритмічно реалізується двома основними частинами: рекурсивною і загартування. Рекурсивна частина являє собою регістр зсуву з лінійним зворотним зв'язком, у якому всі біти в його слові визначаються рекурсивно; потік вихідних бітів визначається також рекурсивно функцією бітів стану.
Регістр зсуву складається з 624 елементів, і, в цілому, з 19937 клітинок. Кожен елемент має довжину 32 біти за винятком першого елемента, який має тільки 1 біт завдяки відкиданню біта.
Процес генерування починається з логічного множення на бітову маску, що відкидає 31 біт (крім найбільш значущих).
Наступним кроком виконується ініціалізація (x0, x1,…, x623) будь-якими беззнаковими 32-розрядними цілими числами. Наступні кроки включають об'єднання та перехідні стани.
Простір станів має 19937 біт (624·32 — 31). Наступний стан генерується зсувом одного слова вертикально вгору і вставленням нового слова в кінець. Нове слово обчислюється гамуванням середньої частини з виключеною. Вихідна послідовність починається з x624, x625,…
Алгоритм має шість етапів:
Крок 0. Попередньо ініціалізується значення сталих u, h, a u ← 10…0 бітова маска старших w-r бітів, h ← 01…1 бітова маска молодших r бітів, a ← aw-1aw-2…a0 останній рядок матриці A.
Крок 1. x[0], x[1],…,x[n-1] ← початкове заповнення
Крок 2. Обчислення (xiu | xi+1l) y ← (x[i] AND u1) OR (x[(i + 1) mod n] AND h1)
Крок 3. Обчислюється значення наступного елемента послідовності за рекурентним виразом (1) x[i] ← x[(i + m) mod n] XOR (y>>1) XOR a якщо молодший біт y = 1
Або x[i] ← x[(i + m) mod n] XOR (y>>1) XOR 0 якщо молодший біт y = 0 Крок 4. Обчислення x[i]T y ← x[i] y ← y XOR (y>>u) y ← y XOR ((y<<s) AND b) y ← y XOR ((y<<t) AND c) z ← y XOR (y>>l) виведення z Крок 5. i ← (i + 1) mod n
Крок 6. Перейти до кроку 2.
Параметри 32-бітового генератора MT
Параметри MT ретельно підібрано для досягнення згаданих вище властивостей. Параметри n і r вибрано так, що характеристичний многочлен примітивний або nw — r дорівнює числу Мерсенна 19937. Зверніть увагу, що значення w еквівалентне розміру слова комп'ютера. У цьому випадку це 32 біти. Тоді як значення n, m, r і w фіксуються, значення останнього рядка матриці A вибирається випадковим чином. Для чисел Мерсенна тест на простоту цілих значно простіший. Так, відомо багато простих чисел Мерсенна (тобто простих виду 2p−1), до p=43112609[1] [ 13 березня 2019 у Wayback Machine.] . Параметри загартування (англ. tempering) підібрано так, що ми можемо отримати хороший рівномірний розподіл. Всі параметри МТ наведено в таблиці 1.
n | 624 |
w | 32 |
r | 31 |
m | 397 |
a | 9908B0DF16 |
u | 11 |
s | 7 |
t | 15 |
l | 18 |
b | 9D2C568016 |
c | EFC6000016 |
Інші варіанти реалізації
У зв'язку зі змінами в технології, зокрема, зростанням продуктивності процесорів, винайдено 64-бітові і 128-бітові версії МТ. 64-розрядну версію запропонував 2000 року Такудзі Нісімура, 128-розрядну — 2006 року теж він. Обидві версії мають той самий період, що й оригінальний MT.
64-бітовий MT має дві версії. Перша версія використовує те саме рекурсивне співвідношення, в другу версію додано ще два вектори, що збільшило кількість членів характеристичного многочлена:
Порівняно з 32-розрядною версією MT, 64-розрядна версія працює швидше. Всі параметри для 64-бітової версії наведено в таблиці 2.
ID | Для рекурсивного співвідношення (1) | Для рекурсивного співвідношення (2) | |||
---|---|---|---|---|---|
n | 312 | 312 | 312 | 312 | 312 |
w | 64 | 64 | 64 | 64 | 64 |
r | 31 | 31 | 31 | 31 | 31 |
m | 156 | 156 | |||
m0 | 63 | 63 | 63 | ||
m1 | 151 | 151 | 151 | ||
m2 | 224 | 224 | 224 | ||
a | B5026F5AA96619E916 | F6A3F020F058B7A716 | B3815B624FC82E2F16 | 8EBD4AD46CB39A1E16 | CACB98F78EBCD4ED16 |
b | D66B5EF5B4DA000016 | 28AAF6CDBDB4000016 | 599CFCBFCA66000016 | 656BEDFFD9A4000016 | A51DBEFFDA6C000016 |
c | FDED6BE00000000016 | FDEDEAE00000000016 | FFFAAFFE0000000016 | FDFECE7E0000000016 | FFEE9BF60000000016 |
u | 29 | 29 | 26 | 26 | 26 |
s | 17 | 17 | 17 | 17 | 17 |
t | 37 | 37 | 33 | 33 | 33 |
l | 41 | 41 | 39 | 39 | 39 |
Примітки
- Twisted GFSR generators, 1992.
- boost/random/mersenne_twister.hpp. Boost C++ Libraries. Архів оригіналу за 19 листопада 2012. Процитовано 29 травня 2012.
- Changes to GLib. GLib Reference Manual. Архів оригіналу за 19 листопада 2012. Процитовано 29 травня 2012.
- 9.6 random — Generate pseudo-random numbers. Python v2.6.8 documentation. Архів оригіналу за 19 листопада 2012. Процитовано 29 травня 2012.
- 8.6 random — Generate pseudo-random numbers. Python v3.2 documentation. Архів оригіналу за 19 листопада 2012. Процитовано 29 травня 2012.
- . Python 3.8.3 documentation. Архів оригіналу за 28 липня 2021. Процитовано 23 червня 2020.
- . Ruby 1.9.3 documentation. Архів оригіналу за 26 червня 2021. Процитовано 29 травня 2012.
- Random Number Generators. CRAN Task View: Probability Distributions. Архів оригіналу за 19 листопада 2012. Процитовано 29 травня 2012.
- mt_srand. php documentation. Архів оригіналу за 19 листопада 2012. Процитовано 29 травня 2012.
- . Matlab Documentation. Архів оригіналу за 12 вересня 2010. Процитовано 23 листопада 2015.
- . Архів оригіналу за 6 квітня 2021. Процитовано 28 липня 2021.
- CryptMT Stream Cipher.
- Matsumoto, Nishimura, 2017.
- Cryptographic Mersenne Twister and Fubuki Stream/Block Cipher, 2005.
- Nishimura, 2000.
- . Архів оригіналу за 9 листопада 2020. Процитовано 28 липня 2021.
- . Архів оригіналу за 8 січня 2020. Процитовано 28 липня 2021.
Література
- M. Matsumoto, T. Nishimura. Mersenne twister: A 623-dimensionally equidistributed uniform pseudorandom number generator // ACM Trans. on Modeling and Computer Simulations : journal. — 2017. — Vol. 8, no. 1 (16 June). — P. 3—30. — DOI: .
- Matsumoto, M.; Kurita, Y. Twisted GFSR generators // ACM Trans. on Modeling and Computer Simulations. — 1992. — Т. 2, № 3 (16 June). — С. 179—194. — DOI: .
- Matsumoto, Makoto; Nishimura, Takuji; Hagita, Mariko; Saito, Mutsuo. Cryptographic Mersenne Twister and Fubuki Stream/Block Cipher. — 2005. — 16 June. з джерела 27 липня 2021. Процитовано 28 липня 2021.
- T. Nishimura. Tables of 64-bit Mersenne twisters // ACM Trans. on Modeling and Computer Simulations. — 2000. — Т. 10, № 4 (16 June). — С. 248—357. — DOI: .
- Matsumoto M., Saito M., Nishimura T., Hagita M. CryptMT Stream Cipher Ver. 3.The eSTREAM Project. з джерела 20 липня 2020. Процитовано 28 липня 2021.
Посилання
- Makoto Matsumoto, Academic publications on MT [ 3 серпня 2020 у Wayback Machine.](англ.)
- (англ.)
- Cuba — a library for multidimensional numerical integration [ 7 квітня 2014 у Wayback Machine.]
- The Mersenne Twister [ 26 червня 2021 у Wayback Machine.](англ.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Vihor Mersenna angl Mersenne twister MT generator psevdovipadkovih chisel GPVCh rozroblenij 1997 roku yaponskimi vchenimi Makoto Macumoto yap 松本 眞 i Takudzi Nisimuroyu yap 西村 拓士 Vihor Mersenna gruntuyetsya na vlastivostyah prostih chisel Mersenna zvidsi j nazva i zabezpechuye shvidke generuvannya visokoyakisnih za kriteriyem vipadkovosti psevdovipadkovih chisel Vihor Mersenna pozbavlenij bagatoh nedolikiv vlastivih inshim GPVCh takih yak malij period peredbachuvanist legko vidshukuvani statistichni zakonomirnosti Prote cej generator ne ye kriptostijkim sho obmezhuye jogo vikoristannya v kriptografiyi Isnuyut prinajmni dva zagalnih varianti algoritmu sho vidriznyayutsya tilki velichinoyu vikoristovuvanogo prostogo chisla Mersenna najposhirenishim z yakih ye algoritm MT19937 period yakogo stanovit 219937 1 priblizno 4 3 106001 VlastivostiVihor Mersenna ye vitkovim registrom zsuvu z uzagalnenoyu viddacheyu TGFSR angl twisted generalised feedback shift register Vihor ce peretvorennya yake zabezpechuye rivnomirnij rozpodil generovanih psevdovipadkovih chisel u 623 vimirah dlya linijnih kongruentnih generatoriv jogo obmezheno 5 vimirami Tomu funkciya korelyaciyi mizh dvoma poslidovnostyami vibirok u vihidnij poslidovnosti vihoru Mersenna mizerno mala Psevdovipadkova poslidovnist porodzhena vihorom Mersenna maye duzhe velikij period rivnij chislu Mersenna chogo bilsh nizh dostatno dlya bagatoh praktichnih zastosuvan Isnuyut efektivni realizaciyi vihoru Mersenna sho perevershuyut za shvidkistyu bagato standartnih GPVCh zokrema v 2 3 razi shvidshe vid linijnih kongruentnih generatoriv Algoritm vihoru Mersenna realizovano v programnij biblioteci Boost Glib i standartnih bibliotekah dlya C Python Ruby R PHP MATLAB Autoit Vidavani vihorom Mersenna poslidovnosti psevdovipadkovih chisel uspishno prohodyat statistichni testi Diehard sho pidtverdzhuye yihni horoshi statistichni vlastivosti Generator ne priznachenij dlya otrimannya kriptografichno stijkih vipadkovih poslidovnostej chisel Dlya zabezpechennya kriptostijkosti vihidnu poslidovnist generatora slid obrobiti odnim iz kriptografichnih algoritmiv heshuvannya K rozpodilZaproponovano bagato generatoriv mozhlivo visokoyi yakosti ale tilki deyaki mozhna vikoristati dlya serjoznogo modelyuvannya cherez vidsutnist chitkogo ponyattya haotichnosti dlya generatoriv psevdovipadkovih chisel oskilki kozhen doslidnik koncentruyetsya na konkretnih parametrah haotichnosti Sered bagatoh vidomih mir testi zasnovani na vishomu rivnomirnomu rozpodili taki yak spektralnij test i test na k rozpodili opisanij nizhche vvazhayutsya najsilnishimi Viznachennya Kazhut sho psevdovipadkova poslidovnist xi z periodom P sho skladayetsya z w bitovih cilih maye k rozpodil z v bitovoyu tochnistyu yaksho vona zadovolnyaye takij umovi Nehaj truncv x chislo utvorene pershimi v bitami poslidovnosti xi rozglyanemo P z k v bitovih vektoriv viglyadu trunc v x i trunc v x i 1 trunc v x i k 1 0 i lt P displaystyle text trunc v x i text trunc v x i 1 text trunc v x i k 1 quad 0 leq i lt P Todi kozhna z 2kv mozhlivih kombinacij bitiv zustrichayetsya rivne chislo raziv za vinyatkom kombinaciyi sho skladayetsya povnistyu z nuliv yaka zustrichayetsya na odin raz menshe Geometrichna interpretaciya Dlya kozhnogo v 1 2 w nehaj k v najbilshe chislo take sho poslidovnist ye k rozpodilenoyu z v bitovoyu tochnistyu Podilimo kozhne cile xi na 2w dlya normalizaciyi v psevdovipadkove dijsne chislo xi z intervalu 0 1 Pomistimo P tochok v k vimirnij kub z koordinatami xi xi 1 xi k 1 i 0 1 P 1 dlya vsogo periodu Kozhna z osej danogo k vimirnogo kuba podilena na 2v intervaliv Takim chinom mi podilili kub na 2kv malih kubiv Poslidovnist ye k rozpodilenoyu z v bitovoyu tochnistyu yaksho kozhen malij kub mistit rivne chislo tochok krim kuba v pochatku koordinat yakij mistit na odnu tochku menshe Otzhe chim vishe k v dlya kozhnogo v tim bilshe vimiriv matime rozpodil z v bitovoyu tochnistyu Pid testom na k rozpodil budemo rozumiti otrimannya znachen k v Opisx poznachatimemo w vimirni vektori nad polem F 2 displaystyle F 2 0 1 vidpovidni mashinnim slovam rozmiru w Vihor Mersenna generuye poslidovnist vektoriv yaki ye psevdovipadkovimi cilimi z diapazonu vid 0 do 2w 1 Dilennyam na 2w 1 mozhna takozh otrimati psevdovipadkove dijsne chislo z diapazonu 0 1 Algoritm gruntuyetsya na takij rekurentnij formuli x k n x k m x k u x k 1 l A k 0 1 1 displaystyle x k n x k m oplus x k u mid x k 1 l A qquad k 0 1 ldots qquad 1 de n cile yake poznachaye poryadok rekurentnosti m cile 1 m lt n A matricya rozmiru w w z elementami z F 2 displaystyle F 2 displaystyle mid pobitove ABO OR displaystyle oplus dodavannya za modulem dva XOR U pravij chastini xku poznachaye starshi w r bit xk i xk 1l molodshi r bit xk 1 Vektor xku xk 1l ye konkatenaciyeyu starshih w r bit xk i molodshih r bit xk 1 Vzyavshi x0 x1 xn 1 dlya pochatkovogo zapovnennya Todi generator obchislit xn za rekurentnim virazom pri k 0 Dlya k 1 2 generator obchislit xn 1 xn 2 Formu matrici A obrano z rozrahunku shvidkosti vikonannya mnozhennya na A A 0 1 0 0 1 0 1 a w 1 a w 2 a 0 displaystyle A begin pmatrix 0 amp 1 amp amp amp amp 0 amp 0 amp 1 amp amp amp 0 amp cdots amp cdots amp ddots amp amp amp amp amp amp ddots amp amp amp amp amp amp 1 a w 1 amp a w 2 amp cdots amp cdots amp cdots amp a 0 end pmatrix I obchislennya xA zvoditsya do pobitovih operacij x A x 1 x 0 0 x 1 a x 0 1 displaystyle boldsymbol x A begin cases boldsymbol x gg 1 amp x 0 0 boldsymbol x gg 1 oplus boldsymbol a amp x 0 1 end cases de x x k u x k 1 l k 0 1 displaystyle boldsymbol x x k u mid x k 1 l qquad qquad k 0 1 ldots a a w 1 a w 2 a 0 displaystyle boldsymbol a a w 1 a w 2 ldots a 0 x x w 1 x w 2 x 0 displaystyle boldsymbol x x w 1 x w 2 ldots x 0 Nepovni masivi Nepovni masivi Poslidovnist MT xk n xk n 1 xk 1u utvoryuye n w r masiv Oskilki r bitiv vidkidayutsya masiv nazivayut nepovnim masivom Kozhen element otrimano z rekurentnogo spivvidnoshennya 1 Zmina stanu MT takozh vidbuvayetsya za linijnim spivvidnoshennyam i viznachayetsya za dopomogoyu linijnogo peretvorennya B Vidpovidno do zagalnoyi teoriyi linijnih rekurentnih poslidovnostej kozhne znachennya v n w r masivi ye linijnoyu rekurentnoyu poslidovnistyu sho vidpovidaye harakteristichnomu mnogochlenu fB t peretvorennya B Matricya B maye rozmiri n w r n w r i taku formu B 0 I w 0 0 I w 0 0 I w 0 0 0 0 I w r S 0 0 0 m th row displaystyle B begin pmatrix 0 amp I w amp cdots amp 0 amp 0 vdots amp amp amp amp I w amp vdots amp ddots amp vdots amp vdots vdots amp amp amp amp 0 amp 0 amp cdots amp I w amp 0 0 amp 0 amp cdots amp 0 amp I w r S amp 0 amp cdots amp 0 amp 0 end pmatrix begin matrix leftarrow m hbox th row end matrix S 0 I r I w r 0 A displaystyle S begin pmatrix 0 amp I r I w r amp 0 end pmatrix A de I r displaystyle I r odinichna matricya rozmiru r r Dlya l 0 1 displaystyle l 0 1 ldots vikonuyetsya x l n x l n 1 x l 1 x l n 1 x l n 2 x l B displaystyle x l n x l n 1 ldots x l 1 x l n 1 x l n 2 ldots x l B Harakteristichnij mnogochlen fB t peretvorennya B maye viglyad F B t t n t m w r t n 1 t m 1 r a 0 t n t m w r t n 1 t m 1 r 1 a r 2 t n t m w r t n 1 t m 1 a r 1 t n t m w r a r t n t m w r 1 a w 2 t n t m a w 1 displaystyle Phi B t t n t m w r cdot t n 1 t m 1 r a 0 t n t m w r cdot t n 1 t m 1 r 1 a r 2 t n t m w r cdot t n 1 t m 1 a r 1 t n t m w r a r t n t m w r 1 a w 2 t n t m a w 1 Poslidovnist dosyagaye maksimalnogo periodu 2 nw r 1 todi i tilki todi koli fB t primitivnij Zagartuvannya Neobrobleni poslidovnosti sho generuyutsya rekursiyeyu 1 mayut poganij rivnomirnij rozpodil na velikih rozmirnostyah Shob ce vipraviti vikoristovuyetsya metod zagartuvannya angl tempering na vihodi yakogo otrimuyut kincevu psevdovipadkovu poslidovnist Metod polyagaye v tomu sho kozhne zgenerovane slovo mnozhitsya pravoruch na specialnu oborotnu matricyu T rozmirom w w Dlya matrici T x z x T vibrano taki poslidovni peretvorennya y x x gt gt u y y y lt lt s amp b y y y lt lt t amp c z y y gt gt l de l s t i u cili a b i c specialno pidibrani bitovi maski rozmiru slova i x u poznachaye pobitovu operaciyu zsuvu vpravo na u bitiv AlgoritmVihor Mersenna algoritmichno realizuyetsya dvoma osnovnimi chastinami rekursivnoyu i zagartuvannya Rekursivna chastina yavlyaye soboyu registr zsuvu z linijnim zvorotnim zv yazkom u yakomu vsi biti v jogo slovi viznachayutsya rekursivno potik vihidnih bitiv viznachayetsya takozh rekursivno funkciyeyu bitiv stanu Blok shema Registr zsuvu skladayetsya z 624 elementiv i v cilomu z 19937 klitinok Kozhen element maye dovzhinu 32 biti za vinyatkom pershogo elementa yakij maye tilki 1 bit zavdyaki vidkidannyu bita Proces generuvannya pochinayetsya z logichnogo mnozhennya na bitovu masku sho vidkidaye 31 bit krim najbilsh znachushih Nastupnim krokom vikonuyetsya inicializaciya x0 x1 x623 bud yakimi bezznakovimi 32 rozryadnimi cilimi chislami Nastupni kroki vklyuchayut ob yednannya ta perehidni stani Zmina stanu MT Prostir staniv maye 19937 bit 624 32 31 Nastupnij stan generuyetsya zsuvom odnogo slova vertikalno vgoru i vstavlennyam novogo slova v kinec Nove slovo obchislyuyetsya gamuvannyam serednoyi chastini z viklyuchenoyu Vihidna poslidovnist pochinayetsya z x624 x625 Algoritm maye shist etapiv Krok 0 Poperedno inicializuyetsya znachennya stalih u h a u 10 0 bitova maska starshih w r bitiv h 01 1 bitova maska molodshih r bitiv a aw 1aw 2 a0 ostannij ryadok matrici A Krok 1 x 0 x 1 x n 1 pochatkove zapovnennya Krok 2 Obchislennya xiu xi 1l y x i AND u1 OR x i 1 mod n AND h1 Krok 3 Obchislyuyetsya znachennya nastupnogo elementa poslidovnosti za rekurentnim virazom 1 x i x i m mod n XOR y gt gt 1 XOR a yaksho molodshij bit y 1 Abo x i x i m mod n XOR y gt gt 1 XOR 0 yaksho molodshij bit y 0 Krok 4 Obchislennya x i T y x i y y XOR y gt gt u y y XOR y lt lt s AND b y y XOR y lt lt t AND c z y XOR y gt gt l vivedennya z Krok 5 i i 1 mod n Krok 6 Perejti do kroku 2 Parametri 32 bitovogo generatora MTParametri MT retelno pidibrano dlya dosyagnennya zgadanih vishe vlastivostej Parametri n i r vibrano tak sho harakteristichnij mnogochlen primitivnij abo nw r dorivnyuye chislu Mersenna 19937 Zvernit uvagu sho znachennya w ekvivalentne rozmiru slova komp yutera U comu vipadku ce 32 biti Todi yak znachennya n m r i w fiksuyutsya znachennya ostannogo ryadka matrici A vibirayetsya vipadkovim chinom Dlya chisel Mersenna test na prostotu cilih znachno prostishij Tak vidomo bagato prostih chisel Mersenna tobto prostih vidu 2p 1 do p 43112609 1 13 bereznya 2019 u Wayback Machine Parametri zagartuvannya angl tempering pidibrano tak sho mi mozhemo otrimati horoshij rivnomirnij rozpodil Vsi parametri MT navedeno v tablici 1 Tablicya 1 n 624 w 32 r 31 m 397 a 9908B0DF16 u 11 s 7 t 15 l 18 b 9D2C568016 c EFC6000016Inshi varianti realizaciyiU zv yazku zi zminami v tehnologiyi zokrema zrostannyam produktivnosti procesoriv vinajdeno 64 bitovi i 128 bitovi versiyi MT 64 rozryadnu versiyu zaproponuvav 2000 roku Takudzi Nisimura 128 rozryadnu 2006 roku tezh vin Obidvi versiyi mayut toj samij period sho j originalnij MT 64 bitovij MT maye dvi versiyi Persha versiya vikoristovuye te same rekursivne spivvidnoshennya v drugu versiyu dodano she dva vektori sho zbilshilo kilkist chleniv harakteristichnogo mnogochlena x k n x k m 2 x k m 1 x k m 0 x k u x k 1 l A 2 displaystyle x k n x k m2 oplus x k m1 oplus x k m0 oplus x k u mid x k 1 l A qquad 2 Porivnyano z 32 rozryadnoyu versiyeyu MT 64 rozryadna versiya pracyuye shvidshe Vsi parametri dlya 64 bitovoyi versiyi navedeno v tablici 2 Tablicya 2 ID Dlya rekursivnogo spivvidnoshennya 1 Dlya rekursivnogo spivvidnoshennya 2 n 312 312 312 312 312 w 64 64 64 64 64 r 31 31 31 31 31 m 156 156 m0 63 63 63 m1 151 151 151 m2 224 224 224 a B5026F5AA96619E916 F6A3F020F058B7A716 B3815B624FC82E2F16 8EBD4AD46CB39A1E16 CACB98F78EBCD4ED16 b D66B5EF5B4DA000016 28AAF6CDBDB4000016 599CFCBFCA66000016 656BEDFFD9A4000016 A51DBEFFDA6C000016 c FDED6BE00000000016 FDEDEAE00000000016 FFFAAFFE0000000016 FDFECE7E0000000016 FFEE9BF60000000016 u 29 29 26 26 26 s 17 17 17 17 17 t 37 37 33 33 33 l 41 41 39 39 39PrimitkiTwisted GFSR generators 1992 boost random mersenne twister hpp Boost C Libraries Arhiv originalu za 19 listopada 2012 Procitovano 29 travnya 2012 Changes to GLib GLib Reference Manual Arhiv originalu za 19 listopada 2012 Procitovano 29 travnya 2012 9 6 random Generate pseudo random numbers Python v2 6 8 documentation Arhiv originalu za 19 listopada 2012 Procitovano 29 travnya 2012 8 6 random Generate pseudo random numbers Python v3 2 documentation Arhiv originalu za 19 listopada 2012 Procitovano 29 travnya 2012 Python 3 8 3 documentation Arhiv originalu za 28 lipnya 2021 Procitovano 23 chervnya 2020 Ruby 1 9 3 documentation Arhiv originalu za 26 chervnya 2021 Procitovano 29 travnya 2012 Random Number Generators CRAN Task View Probability Distributions Arhiv originalu za 19 listopada 2012 Procitovano 29 travnya 2012 mt srand php documentation Arhiv originalu za 19 listopada 2012 Procitovano 29 travnya 2012 Matlab Documentation Arhiv originalu za 12 veresnya 2010 Procitovano 23 listopada 2015 Arhiv originalu za 6 kvitnya 2021 Procitovano 28 lipnya 2021 CryptMT Stream Cipher Matsumoto Nishimura 2017 Cryptographic Mersenne Twister and Fubuki Stream Block Cipher 2005 Nishimura 2000 Arhiv originalu za 9 listopada 2020 Procitovano 28 lipnya 2021 Arhiv originalu za 8 sichnya 2020 Procitovano 28 lipnya 2021 LiteraturaM Matsumoto T Nishimura Mersenne twister A 623 dimensionally equidistributed uniform pseudorandom number generator ACM Trans on Modeling and Computer Simulations journal 2017 Vol 8 no 1 16 June P 3 30 DOI 10 1145 272991 272995 Matsumoto M Kurita Y Twisted GFSR generators ACM Trans on Modeling and Computer Simulations 1992 T 2 3 16 June S 179 194 DOI 10 1145 146382 146383 Matsumoto Makoto Nishimura Takuji Hagita Mariko Saito Mutsuo Cryptographic Mersenne Twister and Fubuki Stream Block Cipher 2005 16 June z dzherela 27 lipnya 2021 Procitovano 28 lipnya 2021 T Nishimura Tables of 64 bit Mersenne twisters ACM Trans on Modeling and Computer Simulations 2000 T 10 4 16 June S 248 357 DOI 10 1145 369534 369540 Matsumoto M Saito M Nishimura T Hagita M CryptMT Stream Cipher Ver 3 The eSTREAM Project z dzherela 20 lipnya 2020 Procitovano 28 lipnya 2021 PosilannyaMakoto Matsumoto Academic publications on MT 3 serpnya 2020 u Wayback Machine angl angl Cuba a library for multidimensional numerical integration 7 kvitnya 2014 u Wayback Machine The Mersenne Twister 26 chervnya 2021 u Wayback Machine angl