golang包的日常(4)——math/rand包:生成随机数

package rand

import "math/rand"

rand包实现了伪随机数生成器。

常用随机数生成方法

这里只介绍自己用到过的部分,更多函数/方法请参考标准库文档中文版

rand.Seed:设置随机数种子

func Seed(seed int64)

使用给定的seed将默认资源初始化到一个确定的状态;如未调用Seed,默认资源的行为就好像调用了Seed(1)
如果程序每次运行,随机数种子都相同,那么使用随机数函数得到的随机数都是一样的,想让程序每次运行得到的随机数都不同,就需要让每次的随机数种子不相同。

示例:

func main() {
	rand.Seed(time.Now().UnixNano()) // 取纳秒时间戳,可以保证每次的随机数种子都不同
	for i := 0; i < 5; i++ {
		fmt.Println(rand.Intn(1000)) // Intn(n)返回一个取值范围在[0,n)的伪随机int值
	}
}

第一次输出:

357
762
182
207
646

第二次输出:

435
28
673
573
491

rand.Int:生成非负伪随机int值

func Int() int

返回一个非负的伪随机int值。

还有生成各种整型随机数的函数:

  • func Int31() int32:返回一个int32类型的非负的31位伪随机数;
  • func Int63() int64:返回一个int64类型的非负的63位伪随机数;
  • func Uint32() uint32:返回一个uint32类型的非负的32位伪随机数。

rand.Intn(n):生成取值范围[0, n)的伪随机int值

func Intn(n int) int

返回一个取值范围在[0,n)的伪随机int值,如果n<=0会panic。

还有生成各种整型范围随机数的函数:

  • func Int31n(n int32) int32:返回一个取值范围在[0,n)的伪随机int32值,如果n<=0会panic;
  • func Int63n(n int64) int64:返回一个取值范围在[0, n)的伪随机int64值,如果n<=0会panic。

rand.Float32:生成取值范围[0.0, 1.0)的伪随机float32值

func Float32() float32

返回一个取值范围在[0.0, 1.0)的伪随机float32值。

还有生成float64值的函数:

func Float64() float64

返回一个取值范围在[0.0, 1.0)的伪随机float64值。

NormFloat64:标准正态分布

func NormFloat64() float64

返回一个服从标准正态分布(标准差=1,期望=0)、取值范围在[-math.MaxFloat64, +math.MaxFloat64]float64值。

如果要生成不同的正态分布值,调用者可用如下代码调整输出:

sample = NormFloat64() * 标准差 + 期望

ExpFloat64:标准指数分布

func ExpFloat64() float64

返回一个服从标准指数分布(率参数=1,率参数是期望的倒数)、取值范围在(0, +math.MaxFloat64]float64值。

如要生成不同的指数分布值,调用者可用如下代码调整输出:

sample = ExpFloat64() / 率参数

Perm:生成随机排列的整数切片

func Perm(n int) []int

返回一个有n个元素的,[0,n)范围内整数的伪随机排列的切片。

示例:

fmt.Println(rand.Perm(10)) // [3 7 0 1 9 2 4 5 6 8]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值