Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Вихрь Мерсенна является псевдослучайных чисел (ПСЧ). Это, безусловно, наиболее широко используемый ГПСЧ общего назначения. [1] Его название происходит от того факта, что длина периода выбрана как простое число Мерсенна .

Mersenne Twister был разработан в 1997 году Макото Мацумото  [ джа ] (松本 眞) и Такудзи Нисимура (西村 拓 士) . [2] Он был разработан специально для исправления большинства недостатков, обнаруженных в старых ГПСЧ.

Наиболее часто используемая версия алгоритма Мерсенна Твистера основана на простом числе Мерсенна 2 19937 -1. Стандартная реализация этого, MT19937, использует 32-битную длину слова. Существует еще одна реализация (с пятью вариантами [3] ), в которой используется длина слова 64 бита, MT19937-64; он генерирует другую последовательность.

Внедрение в программных системах [ править ]

Mersenne Twister - это ГПСЧ по умолчанию для следующих программных систем: Dyalog APL , [4] Microsoft Excel , [5] GAUSS , [6] GLib , [7] GNU Multiple Precision Arithmetic Library , [8] GNU Octave , [9] Научная библиотека GNU , [10] gretl , [11] IDL , [12] Джулия , [13] CMU Common Lisp , [14] Embeddable Common Lisp , [15] Steel Bank Common Lisp , [16] Maple, [17] MATLAB , [18] Free Pascal , [19] PHP , [20] Python , [21] [22] [23] R , [24] Ruby , [25] SageMath , [26] Scilab , [27] ] Stata . [28]

Он также доступен в Apache Commons , [29] в стандартном C ++ (так как C ++ 11 ), [30] [31] и в Mathematica . [32] Надстройка на реализацию обеспечивается во многих программных библиотеках, в том числе Boost , C ++ библиотек , [33] CUDA библиотека , [34] и численная библиотеки NAG . [35]

Mersenne Twister - один из двух PRNG в SPSS : второй генератор сохранен только для совместимости со старыми программами, а Mersenne Twister считается «более надежным». [36] Mersenne Twister также является одним из ГПСЧ в SAS : другие генераторы устарели и устарели. [37] Mersenne Twister - это ГПСЧ по умолчанию в Stata , другой - KISS , для совместимости со старыми версиями Stata. [38]

Преимущества [ править ]

  • Имеет разрешительную лицензию и не содержит патентов для всех вариантов, кроме CryptMT.
  • Проходит множество тестов на статистическую случайность, включая тесты Дихарда и большинство, но не все тесты TestU01 . [39]
  • Очень длинный период 2 19937  - 1. Обратите внимание, что, хотя длительный период не является гарантией качества в генераторе случайных чисел, короткие периоды, такие как 2 32, обычно используемые во многих старых программных пакетах, могут быть проблематичными. [40]
  • k -распределенный с 32-битной точностью для каждого 1 ≤ k ≤ 623 (определение k -распределенного, см. ниже )
  • Реализации обычно создают случайные числа быстрее, чем истинные случайные методы. Исследование показало, что Mersenne Twister создает 64-битные случайные числа с плавающей запятой примерно в двадцать раз быстрее, чем аппаратно реализованный набор команд RDRAND на базе процессора . [41]

Недостатки [ править ]

  • Относительно большой буфер состояния, 2,5 КБ , если не используется вариант TinyMT (обсуждается ниже).
  • Посредственная пропускная способность по современным стандартам, если не используется вариант SFMT (обсуждается ниже). [42]
  • Демонстрирует два явных отказа (линейная сложность) как в Crush, так и в BigCrush в наборе TestU01. Тест, как и Мерсенн Твистер, основан на алгебре F 2 . [39] Есть ряд других генераторов, которые проходят все тесты (и множество генераторов, которые терпят неудачу) [ требуется пояснение ] .
  • Несколько экземпляров, которые отличаются только начальным значением (но не другими параметрами), обычно не подходят для моделирования методом Монте-Карло , требующего независимых генераторов случайных чисел, хотя существует метод выбора нескольких наборов значений параметров. [43] [44]
  • Плохая диффузия: может потребоваться много времени, чтобы начать генерировать выходные данные, которые проходят тесты на случайность , если начальное состояние сильно неслучайно, особенно если начальное состояние имеет много нулей. Следствием этого является то, что два экземпляра генератора, запущенные с почти одинаковыми начальными состояниями, обычно выводят почти одинаковую последовательность для многих итераций, прежде чем в конечном итоге расходятся. Обновление алгоритма MT в 2002 году улучшило инициализацию, так что начало с такого состояния маловероятно. [45] Версия с графическим процессором (MTGP) считается даже лучше. [46]
  • Содержит подпоследовательности, в которых нулей больше, чем единиц. Это усиливает плохую диффузионную способность и затрудняет восстановление из состояний с множеством нулей.
  • Не является криптографически безопасным , если не используется вариант CryptMT (обсуждается ниже). Причина в том, что соблюдение достаточного количества итераций (624 в случае MT19937, поскольку это размер вектора состояния, из которого производятся будущие итерации) позволяет прогнозировать все будущие итерации.

Альтернативы [ править ]

Альтернативный генератор, WELL ("Well Equidistributed Long-period Linear"), предлагает более быстрое восстановление, равную случайность и почти равную скорость. [47]

Генераторы xorshift и их варианты Marsaglia являются самыми быстрыми в классе LFSR. [48]

64-битные MELG («64-битные максимально равнораспределенные F 2 -линейные генераторы с простым периодом Мерсенна») полностью оптимизированы с точки зрения свойств k-распределения. [49]

Семейство ACORN (опубликовано в 1989 г.) - это еще один k-распределенный ГПСЧ, который показывает скорость вычислений, аналогичную MT, и лучшие статистические свойства, поскольку он удовлетворяет всем текущим (2019) критериям TestU01; при использовании с соответствующим выбором параметров ACORN может иметь произвольно длительный период и точность.

Семейство PCG - это более современный долгопериодический генератор с лучшей локализацией кэша и менее обнаруживаемым смещением при использовании современных методов анализа. [50]

k -распределение [ править ]

Последовательность псевдослучайных х I из W - битовых целых чисел периода Р называется к-распределенной для v точности битовое , если выполнено следующее.

Пусть trunc v (x) обозначает число, образованное старшими v битами x , и рассмотрим P из k v -битных векторов
.
Тогда каждая из 2 kv возможных комбинаций битов встречается одинаковое количество раз за период, за исключением комбинации всех нулей, которая встречается один раз реже.

Алгоритмическая деталь [ править ]

Визуализация генерации псевдослучайных 32-битных целых чисел с помощью Mersenne Twister. В разделе «Извлечь число» показан пример, когда целое число 0 уже было выведено, а индекс - целое число 1. «Сгенерировать числа» запускается, когда все целые числа были выведены.

Для w- битного слова Twister Мерсенна генерирует целые числа в диапазоне [0, 2 w −1].

Алгоритм Мерсенна Твистера основан на матричной линейной рекуррентности над конечным двоичным полем F 2 . Алгоритм представляет собой сдвиговый регистр со скрученной обобщенной обратной связью [51] (скрученный GFSR или TGFSR) рациональной нормальной формы (TGFSR (R)) с отражением и регулировкой состояния битов. Основная идея состоит в том, чтобы определить ряд с помощью простого рекуррентного отношения, а затем вывести числа в форме , где - обратимая матрица F 2, называемая матрицей темперирования .

Общий алгоритм характеризуется следующими величинами (некоторые из этих объяснений имеют смысл только после прочтения остальной части алгоритма):

  • w : размер слова (в битах)
  • n : степень рецидива
  • m : среднее слово, смещение, используемое в рекуррентном отношении, определяющем серию x , 1 ≤ m < n
  • r : точка разделения одного слова или количество бит нижней битовой маски, 0 ≤ rw - 1
  • a : коэффициенты матрицы скручивания рациональной нормальной формы
  • b , c : битовые маски темперирования TGFSR (R)
  • s , t : сдвиги долота отпуска TGFSR (R)
  • u , d , l : дополнительные смены / маски для закалки Mersenne Twister

с ограничением, что 2 nw  -  r  - 1 - простое число Мерсенна. Этот выбор упрощает тест на примитивность и тест k- распределения , которые необходимы при поиске параметров.

Ряд x определяется как ряд w -битных величин с рекуррентным соотношением:

где означает конкатенацию битовых векторов (с верхними битами слева), побитовое исключающее ИЛИ (XOR), означает верхние биты и означает нижние биты . Преобразование скручивания A определяется в рациональной нормальной форме как:

с I n  - 1 в качестве ( n  - 1) × ( n  - 1) единичной матрицы. Преимущество рациональной нормальной формы состоит в том, что умножение на A может быть эффективно выражено как: (помните, что здесь умножение матриц выполняется в F 2 , и поэтому побитовое исключающее ИЛИ заменяет сложение)

где x 0 - младший бит x .

Как и TGFSR (R), Mersenne Twister каскадируется с преобразованием темперирования, чтобы компенсировать уменьшенную размерность равнораспределения (из-за выбора A в рациональной нормальной форме). Обратите внимание, что это эквивалентно использованию матрицы where для обратимой матрицы, и поэтому анализ характеристического полинома, упомянутый ниже, все еще сохраняется.

Как и в случае с A , мы выбираем преобразование темперирования, чтобы оно было легко вычислимым, и поэтому на самом деле не конструируем само T. В случае Mersenne Twister закалка определяется как

y  : = x  ⊕ (( x  >>  u ) &  d )
y  : = y  ⊕ (( y  <<  s ) &  b )
y  : = y  ⊕ (( y  <<  t ) &  c )
z  : = y  ⊕ ( y  >>  l )

где x - следующее значение из серии, y - временное промежуточное значение, z - значение, возвращаемое алгоритмом, с <<, >> в качестве побитового сдвига влево и вправо, а & - в качестве побитового и . Первое и последнее преобразования добавляются для улучшения равнораспределения младших битов. Из свойства TGFSR требуется достижение верхней границы равнораспределения для верхних битов.

Коэффициенты для MT19937:

  • ( ш , п , м , г ) = (32, 624, 397, 31)
  • а  = 9908B0DF 16
  • ( u , d ) = (11; FFFFFFFF 16 )
  • ( s , b ) = (7, 9D2C5680 16 )
  • ( t , c ) = (15, EFC60000 16 )
  • l  = 18

Обратите внимание, что 32-битные реализации Mersenne Twister обычно имеют d  = FFFFFFFF 16 . В результате d иногда опускается в описании алгоритма, поскольку побитовое и с d в этом случае не имеет никакого эффекта.

Коэффициенты для MT19937-64: [52]

  • ( ш , п , м , г ) = (64, 312, 156, 31)
  • а  = B5026F5AA96619E9 16
  • ( u , d ) = (29, 5555555555555555 16 )
  • ( s , b ) = (17, 71D67FFFEDA60000 16 )
  • ( t , c ) = (37, FFF7EEE000000000 16 )
  • l  = 43

Инициализация [ править ]

Состояние, необходимое для реализации Mersenne Twister, представляет собой массив из n значений по w бит каждое. Для инициализации массива используется w- битное начальное значение для предоставления от x 0 до x n  - 1 путем установки x 0 на начальное значение и последующей установки

x i = f × ( x i −1 ⊕ ( x i −1 >> ( w −2))) + i

для i от 1 до n −1. Первое значение, которое затем генерирует алгоритм, основано на x n , а не на x 0 . Константа f формирует еще один параметр генератора, но не является частью самого алгоритма. Значение f для MT19937 составляет 1812433253, а для MT19937-64 - 6364136223846793005. [52]

Сравнение с классической GFSR [ править ]

Для того , чтобы достичь 2 NW  -  г  - 1 теоретический верхний предел периода Т ДГФС , φ В ( т ) должен быть примитивный многочлен , φ B ( т ) , являющийся характеристический полином из

Преобразование скручивания улучшает классический GFSR со следующими ключевыми свойствами:

  • Период достигает теоретического верхнего предела 2 nw  -  r  - 1 (кроме случая, когда он инициализирован с помощью 0)
  • Равное распределение в n измерениях (например, линейные конгруэнтные генераторы могут в лучшем случае управлять разумным распределением в пяти измерениях)

Псевдокод [ править ]

Следующий псевдокод реализует общий алгоритм Мерсенна Твистера. Константы w , n , m , r , a , u , d , s , b , t , c , l и f такие же, как в описании алгоритма выше. Предполагается, что int представляет тип, достаточный для хранения значений с w битами:

 // Создаем массив длины n для хранения состояния генератора  int [0 .. n -1] MT int index: = n +1 const int lower_mask = (1 << r ) - 1 // То есть двоичный количество r 1  const int upper_mask = младшие w битов ( не lower_mask)  // Инициализируем генератор из начального значения  функции seed_mt ( int seed) { индекс: = n MT [0]: = seed for i от 1 до ( n - 1) { // перебираем каждый элемент MT [i]: = младшие w битов ( f * (MT [i-1] xor (MT [i-1] >> ( w - 2))) + i) } }  // Извлекаем умеренное значение на основе MT [index]  // вызываем twist () каждые n чисел  function extract_number () { if index> = n { if index> n { error «Генератор никогда не был засеян» // Альтернативно, seed с постоянное значение; 5489 используется в справочном коде C [53] } крутить() }  int y: = MT [индекс] y: = y xor ((y >> u ) и  d ) y: = y xor ((y << s ) и  b ) y: = y xor ((y << t ) и  c ) y: = y xor (y >> l )  index: = index + 1 вернуть младшие w битов (y) }  // Генерируем следующие n значений из серии x_i  function twist () { для i от 0 до ( n -1) { int x: = (MT [i] and upper_mask) + (MT [(i + 1) mod  n ] and lower_mask) int xA: = x >> 1 if (x mod 2)! = 0 { // младший бит x равен 1 xA: = xA xor  a } MT [i]: = MT [(i + m ) mod  n ] xor xA } индекс: = 0 }


Варианты [ править ]

CryptMT [ править ]

CryptMT - это потоковый шифр и криптографически безопасный генератор псевдослучайных чисел, который внутренне использует Mersenne Twister. [54] [55] Он был разработан Мацумото и Нисимура вместе с Марико Хагита и Муцуо Сайто. Он был отправлен в проект eSTREAM сети eCRYPT . [54] В отличие от Mersenne Twister или других его производных, CryptMT запатентован .

MTGP [ править ]

MTGP - это вариант Mersenne Twister, оптимизированный для графических процессоров, опубликованный Муцуо Сайто и Макото Мацумото. [56] Базовые операции линейной рекурсии расширены из MT, и параметры выбраны, чтобы позволить многим потокам вычислять рекурсию параллельно, совместно используя свое пространство состояний, чтобы уменьшить нагрузку на память. В документе утверждается, что улучшенное равномерное распределение по сравнению с MT и производительность на очень старом графическом процессоре ( Nvidia GTX260 со 192 ядрами) составляет 4,7 мс для 5 × 10 7 случайных 32-битных целых чисел.

SFMT [ править ]

SFMT ( ориентированный на SIMD Fast Mersenne Twister) - это вариант Mersenne Twister, представленный в 2006 году [57], разработанный для обеспечения высокой скорости при работе на 128-битном SIMD.

  • Это примерно в два раза быстрее, чем Mersenne Twister. [58]
  • У него лучшее свойство равнораспределения v-битовой точности, чем у MT, но хуже, чем у WELL («Хорошо равномерно распределенная длиннопериодная линейная») .
  • Он быстрее восстанавливается из начального состояния с нулевым избытком, чем MT, но медленнее, чем WELL.
  • Он поддерживает различные периоды от 2 607 −1 до 2 216091 −1.

Intel SSE2 и PowerPC AltiVec поддерживаются SFMT. Он также используется для игр с Cell BE на PlayStation 3 . [59]

TinyMT [ править ]

TinyMT - это вариант Mersenne Twister, предложенный Сайто и Мацумото в 2011 году. [60] TinyMT использует всего 127 бит пространства состояний, что значительно меньше по сравнению с 2,5 КиБ состояния в оригинале. Однако он имеет период 2 127 -1, что намного короче, чем у оригинала, поэтому авторы рекомендуют его только в тех случаях, когда память находится в нехватке.

Ссылки [ править ]

  1. ^ Например, Марсланд С. (2011) Машинное обучение ( CRC Press ), §4.1.1. Также см. Раздел «Внедрение в программных системах».
  2. ^ Мацумото, М .; Нисимура, Т. (1998). "Твистер Мерсенна: 623-мерный равнораспределенный генератор однородных псевдослучайных чисел" (PDF) . Транзакции ACM по моделированию и компьютерному моделированию . 8 (1): 3–30. CiteSeerX  10.1.1.215.1141 . DOI : 10.1145 / 272991.272995 . S2CID  3332028 .
  3. ^ Джон Сэвард. «Твистер Мерсенна» . В следующей статье, опубликованной в 2000 году, были даны пять дополнительных форм Mersenne Twister с периодом 2 ^ 19937-1. Все пять были разработаны для реализации с использованием 64-битной арифметики вместо 32-битной арифметики.
  4. ^ "Случайная ссылка" . Справочное руководство по языку Dyalog . Проверено 4 июня 2020 .
  5. ^ Mélard, G. (2014), "О точности статистических процедур в Microsoft Excel 2010", вычислительная статистика , 29 (5): 1095-1128, CiteSeerX 10.1.1.455.5508 , DOI : 10.1007 / s00180-014-0482 -5 , S2CID 54032450  .
  6. ^ Справочник по языку GAUSS 14
  7. ^ Случайные числа: Справочное руководство по GLib
  8. ^ «Алгоритмы случайных чисел» . GNU MP . Проверено 21 ноября 2013 .
  9. ^ «16.3 Специальные служебные матрицы» . GNU Octave . Встроенная функция: rand
  10. ^ "Случайные числа переменных среды" . Научная библиотека GNU . Проверено 24 ноября 2013 .
  11. ^ " униформа ". Справочник по функциям Gretl .
  12. ^ «СЛУЧАЙНОЕ (IDL Ссылка)» . Центр документации Exelis VIS . Проверено 23 августа 2013 .
  13. ^ «Случайные числа» . Документация по языку Julia - Стандартная библиотека .
  14. ^ «Варианты дизайна и расширения» . Руководство пользователя CMUCL . Проверено 3 февраля 2014 .
  15. ^ "Случайные состояния" . Руководство ECL . Проверено 20 сентября 2015 .
  16. ^ «Генерация случайных чисел» . Руководство пользователя SBCL .
  17. ^ "генератор случайных чисел" . Онлайн-справка по Maple . Проверено 21 ноября 2013 .
  18. ^ "Алгоритмы генератора случайных чисел" . Центр документации, MathWorks .
  19. ^ "случайный" . бесплатная паскаль документация . Проверено 28 ноября 2013 .
  20. ^ "mt_rand - Сгенерировать лучшее случайное значение" . Руководство по PHP . Проверено 2 марта 2016 .
  21. ^ «9.6 random - генерировать псевдослучайные числа» . Документация по Python v2.6.8 . Проверено 29 мая 2012 .
  22. ^ «8.6 random - генерировать псевдослучайные числа» . Документация по Python v3.2 . Проверено 29 мая 2012 .
  23. ^ «random - Генерация псевдослучайных чисел - документация Python 3.8.3» . Документация Python 3.8.3 . Проверено 23 июня 2020 .
  24. ^ «Генераторы случайных чисел» . Обзор задач CRAN: распределения вероятностей . Проверено 29 мая 2012 .
  25. ^ " " Случайная "документация по классам" . Документация по Ruby 1.9.3 . Проверено 29 мая 2012 .
  26. ^ Распределения вероятностей - Справочное руководство Sage v7.2: Вероятность
  27. ^ "grand - Случайные числа" . Справка Scilab .
  28. ^ Новый генератор случайных чисел - 64-битный Mersenne Twister
  29. ^ «Генерация данных» . Руководство пользователя Apache Commons Math .
  30. ^ «Генерация случайных чисел в C ++ 11» (PDF) . Стандартный C ++ Foundation .
  31. ^ "std :: mersenne_twister_engine" . Генерация псевдослучайных чисел . Проверено 25 сентября 2012 .
  32. ^ [1] Документация по системе Mathematica
  33. ^ "boost / random / mersenne_twister.hpp" . Расширьте библиотеки C ++ . Проверено 29 мая 2012 .
  34. ^ «Обзор Host API» . Документация CUDA Toolkit . Проверено 2 августа 2016 .
  35. ^ «G05 - Генераторы случайных чисел» . Введение в главу библиотеки NAG . Проверено 29 мая 2012 .
  36. ^ «Генераторы случайных чисел» . IBM SPSS Statistics . Проверено 21 ноября 2013 .
  37. ^ «Использование функций случайных чисел» . Справочник по языку SAS . Проверено 21 ноября 2013 .
  38. ^ Справка по Stata: установить rng - Установить, какой генератор случайных чисел (ГСЧ) использовать
  39. ^ a b П. Л'Экуайер и Р. Симард, " TestU01:" Библиотека AC для эмпирического тестирования генераторов случайных чисел ", Транзакции ACM по математическому программному обеспечению , 33, 4, статья 22 (август 2007 г.).
  40. ^ Примечание: 2 19937 составляет приблизительно 4,3 × 10 6001 ; это на много порядков больше, чем предполагаемое количество частиц в наблюдаемой Вселенной , которое составляет 10 87 .
  41. Маршрут, Мэтью (10 августа 2017 г.). "Синтез популяции ультрахолодных карликов с помощью радиоактивных вспышек". Астрофизический журнал . 845 (1): 66. arXiv : 1707.02212 . Bibcode : 2017ApJ ... 845 ... 66R . DOI : 10.3847 / 1538-4357 / aa7ede . S2CID 118895524 . 
  42. ^ "SIMD-ориентированный Fast Mersenne Twister (SFMT): в два раза быстрее, чем Mersenne Twister" . Японское общество содействия науке . Проверено 27 марта 2017 года .
  43. Макото Мацумото; Такудзи Нисимура. «Динамическое создание генераторов псевдослучайных чисел» (PDF) . Проверено 19 июля 2015 года .
  44. ^ Хироши Харамото; Макото Мацумото; Такудзи Нисимура; Франсуа Паннетон; Пьер Л'Экуайер. «Эффективный скачок вперед для F2-линейных генераторов случайных чисел» (PDF) . Проверено 12 ноя 2015 .
  45. ^ «mt19937ar: Mersenne Twister с улучшенной инициализацией» . hiroshima-u.ac.jp . Проверено 4 октября 2015 года .
  46. Fog, Agner (1 мая 2015 г.). «Генераторы псевдослучайных чисел для векторных и многоядерных процессоров» . Журнал современных прикладных статистических методов . 14 (1): 308–334. DOI : 10.22237 / jmasm / 1430454120 .
  47. ^ П. Л'Экуайер, «Генераторы однородных случайных чисел», Международная энциклопедия статистической науки , Ловрик, Миодраг (ред.), Springer-Verlag, 2010.
  48. ^ "xorshift * / xorshift + генераторы и перестрелка ГПСЧ" .
  49. ^ Harase, S .; Кимото, Т. (2018). «Реализация 64-битных максимально равнораспределенных F 2 -линейных генераторов с периодом простоты Мерсенна» . Транзакции ACM на математическом программном обеспечении . 44 (3): 30: 1–30: 11. arXiv : 1505.06582 . DOI : 10.1145 / 3159444 . S2CID 14923086 . 
  50. ^ "The PCG Paper" .
  51. ^ Мацумото, М .; Курита, Ю. (1992). «Генераторы из витой GFSR» . Транзакции ACM по моделированию и компьютерному моделированию . 2 (3): 179–194. DOI : 10.1145 / 146382.146383 . S2CID 15246234 . 
  52. ^ a b "std :: mersenne_twister_engine" . Генерация псевдослучайных чисел . Проверено 20 июля 2015 .
  53. ^ Takuji Нисимура; Макото Мацумото. "C-программа для MT19937, с улучшенной инициализацией 26.01.2002" . Проверено 20 июля 2015 года .
  54. ^ a b "CryptMt and Fubuki" . ЭКРИПТ . Проверено 12 ноября 2017 .
  55. ^ Мацумото, Макото; Нисимура, Такудзи; Хагита, Марико; Сайто, Муцуо (2005). «Криптографический Мерсенн Твистер и поток / блочный шифр Фубуки» (PDF) .
  56. ^ Муцуо Сайто; Макото Мацумото (2010). «Варианты Mersenne Twister для графических процессоров». arXiv : 1005.4973v3 [ cs.MS ].
  57. ^ "SIMD-ориентированный Fast Mersenne Twister (SFMT)" . hiroshima-u.ac.jp . Проверено 4 октября 2015 года .
  58. ^ «SFMT: Сравнение скорости» . hiroshima-u.ac.jp . Проверено 4 октября 2015 года .
  59. ^ «Лицензия PlayStation®3» . scei.co.jp . Проверено 4 октября 2015 года .
  60. ^ "Крошечный Мерсенн Твистер (TinyMT)" . hiroshima-u.ac.jp . Проверено 4 октября 2015 года .

Дальнейшее чтение [ править ]

  • Харасе, С. (2014), «О 2- линейных отношениях генераторов псевдослучайных чисел Мерсенна Твистера», Математика и компьютеры в моделировании , 100 : 103–113, arXiv : 1301.5435 , doi : 10.1016 / j.matcom.2014.02. 002 , S2CID  6984431.
  • Харасе, С. (2019), «Преобразование Mersenne Twister в числа с плавающей запятой двойной точности», Математика и компьютеры в моделировании , 161 : 76–83, arXiv : 1708.06018 , doi : 10.1016 / j.matcom.2018.08.006 , S2CID  19777310.

Внешние ссылки [ править ]

  • Академическая статья для MT и статьи Макото Мацумото по теме
  • Домашняя страница Mersenne Twister с кодами на C, Fortran, Java, Lisp и некоторых других языках
  • Примеры Mersenne Twister - коллекция реализаций Mersenne Twister на нескольких языках программирования - на GitHub
  • SFMT в действии: Часть I - Создание DLL, включая поддержку SSE2 - в Code Project