почему drand48() показывает одно и то же значение при каждом запуске моей программы?

Я пытаюсь создать переменную для получения случайного значения с помощью drand48(), но при каждом запуске моя переменная принимает одно и то же значение. кто-нибудь может мне помочь (я хочу, чтобы при каждом запуске моя переменная принимала разные значения) ???

let number = drand48 ()

person scbas1000    schedule 07.10.2016    source источник
comment
Прочитали документацию для drand48? Вам нужно посеять его.   -  person rmaddy    schedule 07.10.2016
comment
можешь рассказать об этом??   -  person scbas1000    schedule 07.10.2016
comment
Не прямой ответ на ваш вопрос, но во многих случаях arc4random() или arc4random_uniform() — лучший выбор.   -  person Martin R    schedule 07.10.2016


Ответы (1)


drand48 создает псевдослучайную числовую последовательность. То есть, если он не установлен в другую начальную точку каждый раз, он всегда будет выдавать одни и те же числа.

Чтобы исправить это, вызовите srand48 заранее, чтобы установить новую начальную точку для drand48.

Eg

let time = UInt32(NSDate().timeIntervalSinceReferenceDate)
srand48(Int(time))
let number = drand48 ()

Здесь находятся документы для drand48 и srand48

Изменить: другой способ раздачи, чтобы избежать ошибки, я не с компьютера (на моем телефоне), поэтому, возможно, придется исправить это позже, если это не сработает.

person Olivier Wilkinson    schedule 07.10.2016
comment
что именно делает srand48 ?? - person scbas1000; 07.10.2016
comment
Функция srand48 запускает генератор псевдослучайных чисел. - person David Schwartz; 07.10.2016
comment
также я могу запустить свой код ** Не удается преобразовать значение типа «Int» в ожидаемый тип аргумента «UnsafeMutablePointer‹time_t›» (он же «UnsafeMutablePointer‹Int›»)** - person scbas1000; 07.10.2016
comment
Точно, добавлю в ответ документацию по drand48 и его семейным функциям - person Olivier Wilkinson; 07.10.2016
comment
спасибо, это работает, но небольшое примечание: вы должны изменить srand48(time) на srand48(Int(time)) - person scbas1000; 07.10.2016
comment
Хорошо, я изменю свой ответ сейчас. Приветствую вас! - person Olivier Wilkinson; 07.10.2016
comment
Псевдослучайный, а не судо-случайный. - person James Youngman; 13.02.2017