Есть ли способ генерировать псевдослучайные числа с начальным числом в TCL 8.5? - PullRequest
0 голосов
/ 12 февраля 2020

Я могу заставить работать rand (), но он имеет только выходные данные от 0 до 1, и я не могу использовать любое начальное значение в этом.

Попытка создать генератор псевдослучайных чисел в TCL и использовать хэширование md5 al go для создания чего-то подобного, proc {secretseed length}, который выводит число байтов в $ length.

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Tcl rand() создает случайные числа, равномерно распределенные по интервалу [0.0, 1.0) (т. Е. Разрешено возвращать 0.0, но не 1.0). Это не криптографического c качества, и на самом деле даже не подходит для использования с симуляцией Монте-Карло (поскольку не было предпринято никаких усилий, чтобы гарантировать, что базовый ГСЧ дает хорошее спектральное распределение). Начальное значение для ГСЧ может быть установлено с помощью специальной функции srand(), например,

expr { srand(123) }

. Чтобы получить целые числа из диапазона, вам необходимо изменить масштаб чисел:

proc random {from to} {
    expr {$from + int(rand() * ($to - $from))}
}

Чтобы произвести случайный выбор из списка, вы делаете это:

proc pick {list} {
    lindex $list [expr {int(rand() * [llength $list])}]
}
1 голос
/ 12 февраля 2020

Я могу заставить работать rand (), но он выводит только от 0 до 1, и я не могу использовать любое начальное значение в этом.

Как насчет srand

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...