我可以使rand()工作,但是它的输出只有0到1,并且我不能在其中使用任何种子值。
试图在TCL中创建一个伪随机数生成器,并使用md5哈希算法进行类似的处理,proc {secretseed length}输出一些$ length字节。
答案 0 :(得分:1)
我可以使rand()工作,但是它只有从0到1的输出,并且 我不能在其中使用任何种子值。
srand
呢?
答案 1 :(得分:1)
Tcl的rand()
产生在间隔 [0.0,1.0)中均匀分布的随机数(即,允许返回0.0,但不返回1.0)。它不是密码质量的,甚至根本不适合与蒙特卡洛模拟一起使用(因为没有做任何努力来确保底层的RNG产生良好的频谱分布)。可以使用特殊的srand()
函数来设置RNG的种子,例如,
expr { srand(123) }
要生成某个范围内的整数,您需要重新缩放数字:
proc random {from to} {
expr {$from + int(rand() * ($to - $from))}
}
要从列表中产生随机选择,请执行以下操作:
proc pick {list} {
lindex $list [expr {int(rand() * [llength $list])}]
}