如何在Go中生成随机的64位无符号整数?

首先我要打电话

rand.Seed(0)

然后我需要一个返回带有以下签名的uint64的函数
func random(min, max uint64) uint64 {
}

上面的函数应在中返回一个随机的64位无符号整数
范围[最小,最大](包括最小和最大)

最佳答案

我不确定为什么你会被低估。我认为您担心max - min大于MaxInt64的情况,这种情况下rand.Int63n会因为您的评论而失败。我将单独处理这种情况。

const maxInt64 uint64 = 1 << 63 - 1

func random(min, max uint64) uint64 {
    return randomHelper(max - min) + min
}

func randomHelper(n uint64) uint64 {
    if n < maxInt64 {
        return uint64(rand.Int63n(int64(n+1)))
    }
    x := rand.Uint64()
    for x > n {
        x = rand.Uint64()
    }
    return x
}

关于go - 在最小和最大之间生成随机uint64,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47856543/

10-11 16:15