math/rand
中的所有整数函数都生成非负数。
rand.Int() int // [0, MaxInt]
rand.Int31() int32 // [0, MaxInt32]
rand.Int31n(n int32) int32 // [0, n)
rand.Int63() int64 // [0, MaxInt64]
rand.Int63n(n int64) int64 // [0, n)
rand.Intn(n int) int // [0, n)
我想生成**[-m,n)**范围内的随机数。换句话说,我想生成一个正数和负数的混合。
5条答案
按热度按时间b1zrtrql1#
我在Go Cookbook中找到了这个例子,它相当于
rand.Range(min, max int)
(如果该函数存在的话):不要忘记在调用任何
rand
函数之前植入PRNG。ocebsuys2#
这将生成给定范围[a,b]内的随机数
source
esbemjvw3#
为了防止
min
和max
一遍又一遍地重复,我建议在考虑时切换range和random。这是我发现的预期工作方式:See on Go Playground
指定范围
Cookbook中的solution you found没有准确说明
min
和max
是如何工作的,但它满足您的规范([-min,max))。我决定将范围指定为封闭区间([-min,max],这意味着它的边界包含在有效范围内)。与我对Cookbook描述的理解相比:会在您指定的任意两个正数(在本例中为1和6)之间给出该随机数。
(可在below the code snippet in the Golang Cookbook中找到)
Cookbook实现相差一个(这当然使它与许多初看起来很有帮助的程序有很好的合作关系)。
nhjlsmyf4#
我写的一个生成随机切片的小工具(非常像python range)
代码-https://github.com/alok87/goutils/blob/master/pkg/random/random.go
kxkpmulp5#
对我有效的解决方案是:
j = rand.Intn(600) - 100
,其中m为100,n为500,它将生成从-100到499的数字。