在min和max之间生成Random uint64

问题描述 投票:-2回答:1

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

首先我需要打电话

rand.Seed(0)

然后我需要一个函数返回带有以下签名的uint64

func random(min, max uint64) uint64 {
}

上面的函数应返回[min,max]范围内的随机64位无符号整数(包括最小值和最大值)

go random
1个回答
1
投票

我不确定你为什么被投票。我认为你担心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
}
© www.soinside.com 2019 - 2024. All rights reserved.