Go 在最小值和最大值之间生成随机uint64
如何在Go中生成随机的64位无符号整数 首先我需要打电话Go 在最小值和最大值之间生成随机uint64,go,random,Go,Random,如何在Go中生成随机的64位无符号整数 首先我需要打电话 rand.Seed(0) 然后我需要一个函数,它返回一个带有以下签名的uint64 func random(min, max uint64) uint64 { } 上述函数应在 范围[最小值,最大值](包括最小值和最大值)我不知道你为什么被否决。我想您担心的是,max-min大于MaxInt64的情况,在这种情况下,rand.Int63n会像您所说的那样失败。我会单独处理那个案子 const maxInt64 uint64 = 1 &
rand.Seed(0)
然后我需要一个函数,它返回一个带有以下签名的uint64
func random(min, max uint64) uint64 {
}
上述函数应在
范围[最小值,最大值](包括最小值和最大值)我不知道你为什么被否决。我想您担心的是,
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
}
const maxInt64 uint64=1 n{
x=rand.Uint64()
}
返回x
}
@tkausl Int63n以int64的形式从默认源返回[0,n]中的非负伪随机数。如果n@gosom:将uint64转换为int64很简单,应该是不言而喻的。@gosom:为了将来的参考,这个问题如果不是用“这是我的要求,为我编写我的函数”。@Flimzy是的,这很简单,但它仍然不包括文档中的最大int。问题需要[min,max]
,但randomHelper
中的任何一种情况都不包括最大值。我想你需要这样的东西