Go 戈朗百万分之一的概率

Go 戈朗百万分之一的概率,go,Go,我正在学习一些围棋,我正在做一些面试练习。我有一个练习,要求一个人以百万分之一的概率随机执行一些操作 比方说,我想百万分之一地返回真值 如果我的数学仍然正确,谷歌也一样,我会用表达式math.Pow1-1/10000000000来计算,但是这会不断地返回我1,这似乎不正确 基于这种描述,我怎样才能确保我在一百万次中只返回一次true呢?这听起来很琐碎,但我真的很挣扎 表达式math.Pow1-1/1000000,但这保持不变 不断地给我返回1,这似乎不正确 一百万分之一是零。整数除法向零截断 使

我正在学习一些围棋,我正在做一些面试练习。我有一个练习,要求一个人以百万分之一的概率随机执行一些操作

比方说,我想百万分之一地返回真值

如果我的数学仍然正确,谷歌也一样,我会用表达式math.Pow1-1/10000000000来计算,但是这会不断地返回我1,这似乎不正确

基于这种描述,我怎样才能确保我在一百万次中只返回一次true呢?这听起来很琐碎,但我真的很挣扎

表达式math.Pow1-1/1000000,但这保持不变 不断地给我返回1,这似乎不正确

一百万分之一是零。整数除法向零截断

使用浮点,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)
}
游乐场:

输出:

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