我正在学习一些围棋,并且正在做一些采访练习。我有一个练习,要求一个练习以百万分之一的概率随机执行一些操作。
假设我想return true
每100万次。
如果我的数学仍然正确(谷歌也是如此),我将使用表达式math.Pow(1-(1/1000000),1000000)
进行计算,但是这会不断向我返回1
,这似乎并不正确。
鉴于此说明,我如何确保我每100万只返回一次true
?这听起来很琐碎,但我真的很努力。
答案 0 :(得分:4)
Go标准库具有rand
程序包,并且具有Intn()
函数,该函数将为您提供[0,n)范围内的伪随机数。因此,要以1/1000000的概率触发事件,您可以执行
package main
import (
"fmt"
"math/rand"
)
func main() {
n := rand.Intn(1000000)
if n == 154397 {
fmt.Println("I am a lucky bastard!")
} else {
fmt.Println("I am not")
}
}
不用说,可以将范围内的任何其他整数替换为154397。 download
答案 1 :(得分:3)
表达式
math.Pow(1-(1/1000000),1000000)
,但这保持不变 不断返回我1
,这似乎是不正确的。
1/1000000
为零。整数除法将截断为零。
使用浮点,而不是1.0:1:
package main
import (
"fmt"
"math"
)
func main() {
p := math.Pow(1-(1/1000000), 1000000)
fmt.Println(p)
p = math.Pow(1-(1.0/1000000), 1000000)
fmt.Println(p)
}
游乐场:https://play.golang.org/p/ZhUAe6imaNv
输出:
1
0.36787925722078507