Свифт - Посевной arc4random_uniform? Или альтернатива?
Позвольте мне начать с того, что я пытаюсь достичь:
Мне нужно случайным образом сгенерировать набор чисел в диапазонеЯ хотел бы, чтобы эти числа были несколько равномерно распределеныМне нужно иметь возможность инициировать генерацию случайных чисел так, чтобы при заданном числе результирующие случайные числа всегда были одинаковыми.После нескольких экспериментов с drand48 (), rand () и arc4random () я решил использовать rand () для получения случайного числа и srand () для заполнения. Вот небольшой пример, упрощенный из того, что я делаю:
let seed: UInt32 = 10
srand(seed)
let start = 0
let end = 100
let randomNumber = Double(rand()) % (end + 1 - start) + start
Это работает. Учитывая то же самое семя, то же самое случайное число выходит. Выполнение нескольких расчетов randomNumber приводит к появлению нескольких различных случайных чисел. Повторный посев через srand снова запускает «случайность».
Единственным недостатком является rand (), который распределен неравномерно. На самом деле, я почти всегда получаю набор чисел, которые по большей части линейно растут.
Похоже, что arc4random_uniform будет генерировать больше равномерного случайного вывода, однако из моего исследования не представляется возможным заполнить arc4random, поскольку он запускается сам при первом вызове и не обязательно «предназначен» для внешней посадки.
Итак, мой вопрос; есть ли лучшая альтернатива srand () / rand (), которая все равно даст мне те же выходные данные для данного семени, но эти выходные данные распределены более равномерно?
Спасибо, Адам