Есть ли способ засеять генератор случайных чисел Swift 4.2

Мне нравится новая вещь Swift 4.2 RandomNumberGenerator, но я не вижу в ней возможности начального числа. Я что-то упускаю или есть ли вообще способ засеять эти генераторы, возможно, вызвав базовую низкоуровневую функцию? У меня много кода, который использует генераторы чисел по умолчанию для числовых типов по умолчанию, и теперь мне нужно убедиться, что все ведет себя точно так же между запусками с минимальными изменениями кода, насколько это возможно.


person user3537411    schedule 17.11.2018    source источник


Ответы (2)


Вся идея новой архитектуры состоит в том, что любой генератор можно заменить, просто приняв протокол RandomNumberGenerator. Поэтому, если вам нужно повторяющееся семя, используйте собственный алгоритм генератора случайных чисел.

person matt    schedule 17.11.2018
comment
Я думаю, что задается вопрос ... Как использовать разные начальные числа для вызовов генератора случайных чисел? Думаю, ответ заключается в том, что Swift выполняет пересев за вас. - person Andrew; 20.09.2019

Если вам нужна воспроизводимость через явное заполнение, вы можете использовать GameplayKit реализацию Mersenne Twister:

import Cocoa
import GameplayKit

let mt = GKMersenneTwisterRandomSource.init(seed: 12345)

for _ in (1...5) {
  print(mt.nextUniform())
}
person pjs    schedule 17.11.2018