百万分之一的Golang 1

时间:2019-03-25 16:57:16

标签: go

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

假设我想return true每100万次。

如果我的数学仍然正确(谷歌也是如此),我将使用表达式math.Pow(1-(1/1000000),1000000)进行计算,但是这会不断向我返回1,这似乎并不正确。

鉴于此说明,我如何确保我每100万只返回一次true?这听起来很琐碎,但我真的很努力。

2 个答案:

答案 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