Xoshiro128++

Быстрый ГПСЧ Блэкмана–Виньи: повороты и XOR

Разворачивается в 4 слова SplitMix64

1–1000

Нашли ошибку или хотите предложить улучшение?

Улучшить калькулятор «Xoshiro128++»

Теория

Xoshiro128++ (Блэкман–Винья, 2019) — представитель семейства, пришедшего на смену Вихрю Мерсенна: xoshiro (xor/shift/rotate) быстрее, компактнее и проходит жёсткие статистические батареи. Состояние — четыре слова по 32 бита, один такт — несколько XOR, один сдвиг и два поворота: \(out = \mathrm{rotl}7(s_0+s_3) + s_0\), далее перемешивание и \(s_3 = \mathrm{rotl}{11}(s_3)\).

Плюсы семейства — период \(2^{128}-1\) и отличная скорость. На родственном xoshiro256** работает Random в .NET 6+; «плюсы» в названии означают вариант выходной функции с меньшими систематическими смещениями. За скорость и качество приходится платить тем же, чем и везде в не-криптографии: линейностью.

Важно: xoshiro — не криптографический генератор: состояние линейно по битам и восстанавливается по выходам. Зерно заполняет состояние через SplitMix64.

Пример с решением

  1. Условие. Зерно 1: первый выход xoshiro128++.
  2. Формула. SplitMix64-развёртка зерна в 4 слова, затем \(out = \mathrm{rotl}_7(s_0+s_3) + s_0\).
  3. Подстановка. Состояние: s₀ = 0x89025CC1, s₁ = 0x910A2DEC, s₂ = 0x658EEC67, s₃ = 0xBEEB8DA1.
  4. Вычисление. \(\mathrm{rotl}_7(s_0+s_3) + s_0 = 2146930148\).
  5. Ответ. 2146930148 (0x7FF78DE4) — первое значение калькулятора при зерне 1.

Главное

  • XOR + повороты вместо умножений — скорость.
  • Период \(2^{128}-1\) на 128-битном состоянии.
  • Не криптографический, несмотря на отличную статистику.