【发布时间】:2015-05-09 23:03:04
【问题描述】:
我正在尝试为 golang 中的程序模拟掷硬币。我正在尝试使用math/rand,我正在使用time 播种。
import (
"fmt"
"math/rand"
"time"
)
根据我在这里和在线其他地方查找的内容,我的实现应该可以工作:
func main() {
var random int
var i int
var j int
for j != 5 && i != 5 {
rand.Seed(time.Now().UnixNano())
random = rand.Intn(1)
if random == 0 {
i = i + 1
}
if random == 1 {
j = j + 1
}
}
fmt.Println(i, j)
}
但是,每次我运行它时,random 总是最终为 0。种子也不会改变,这让我感到困惑。既然在循环中,那么每次播种的时间不应该以纳秒为单位改变吗?
【问题讨论】:
-
另请注意,Go 操场中的时间不会改变。
-
请注意,math/rand 生成伪随机数而不是真实随机数。 (...) 这些伪随机数很容易受到许多密码分析攻击 - 就像 PlayStation 发生的事情一样 (en.wikipedia.org/wiki/Random_number_generator_attack)。