gpt4 book ai didi

go - 如何在官方围棋之旅中播种随机数生成器?

转载 作者:IT王子 更新时间:2023-10-29 01:26:22 24 4
gpt4 key购买 nike

Go官方给出沙箱中的代码如下:

package main

import (
"fmt"
"math/rand"
)

func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}

这条指令:

Note: the environment in which these programs are executed is deterministic, so each time you run the example program rand.Intn will return the same number. (To see a different number, seed the number generator; see rand.Seed.)

阅读rand.Seed官方文档下的条目后和阅读 this answer ,我仍然无法正确地为随机数生成器设置种子。

有人可以演示如何使用 rand.Seed 函数为随机数生成器设置种子吗?

非常感谢,乔恩

最佳答案

默认情况下 rand.Intn 使用 globalRand.Intn .它是内部创建的,refer here .所以当你通过 rand.Seed 设置时

rand.Seed(time.Now().UTC().UnixNano())

然后 globalRand 使用新的种子值。

如果需要,您可以创建自己的带有种子值的随机数生成器。引用godoc example .


播放链接(无种子):https://play.golang.org/p/2yg7xjvHoJ

输出:

My favorite number is 1
My favorite number is 7
My favorite number is 7
My favorite number is 9
My favorite number is 1
My favorite number is 8
My favorite number is 5
My favorite number is 0
My favorite number is 6

播放链接(带种子):https://play.golang.org/p/EpW6R5rvM4

输出:

My favorite number is 0
My favorite number is 8
My favorite number is 7
My favorite number is 2
My favorite number is 3
My favorite number is 9
My favorite number is 4
My favorite number is 7
My favorite number is 8

编辑:

正如@AlexanderTrakhimenok 提到的,在 playground 中程序执行是确定性的。但是,playground 不会阻止您提供 rand.Seed 值。

记住种子值是int64

当您rand.Intn 时,它使用globalRand 的默认种子值1

var globalRand = New(&lockedSource{src: NewSource(1).(Source64)})

在 playground 中 time.Now().UTC().UnixNano() 给你相同的值 1257894000000000000 因为 开始时间被锁定为一个常量。但它与默认种子值不同,这就是第二个 Playground 链接产生不同结果的原因

所以上面两个总是会产生相同的结果。

我们应该如何改变 Playground 上的结果?

是的,我们可以。让我们向 rand.Seed 提供 UnixNano()1500909006430687579,它是从我的机器生成的。

播放链接:https://play.golang.org/p/-nTydej8YF

输出:

My favorite number is 3
My favorite number is 5
My favorite number is 3
My favorite number is 8
My favorite number is 0
My favorite number is 5
My favorite number is 4
My favorite number is 7
My favorite number is 1

关于go - 如何在官方围棋之旅中播种随机数生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45268998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com