Go 戈朗百万分之一的概率
我正在学习一些围棋,我正在做一些面试练习。我有一个练习,要求一个人以百万分之一的概率随机执行一些操作 比方说,我想百万分之一地返回真值 如果我的数学仍然正确,谷歌也一样,我会用表达式math.Pow1-1/10000000000来计算,但是这会不断地返回我1,这似乎不正确 基于这种描述,我怎样才能确保我在一百万次中只返回一次true呢?这听起来很琐碎,但我真的很挣扎 表达式math.Pow1-1/1000000,但这保持不变 不断地给我返回1,这似乎不正确 一百万分之一是零。整数除法向零截断 使用浮点,1.0而不是1:Go 戈朗百万分之一的概率,go,Go,我正在学习一些围棋,我正在做一些面试练习。我有一个练习,要求一个人以百万分之一的概率随机执行一些操作 比方说,我想百万分之一地返回真值 如果我的数学仍然正确,谷歌也一样,我会用表达式math.Pow1-1/10000000000来计算,但是这会不断地返回我1,这似乎不正确 基于这种描述,我怎样才能确保我在一百万次中只返回一次true呢?这听起来很琐碎,但我真的很挣扎 表达式math.Pow1-1/1000000,但这保持不变 不断地给我返回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)
}
游乐场:
输出:
1
0.36787925722078507
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可以替换为范围内的任何其他整数。您使用的是一个常量数学计算,如果每次返回的值都不相同,那将是一个巨大的问题-就像1+1不总是计算为2一样。如果您想要一个随机概率机会,您需要使用RNG,例如……啊,有这是我的错误。我使用了1/1000000而不是1.0/1000000