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])}]
}