type Source
type Source interface {
Int63() int64
Seed(seed int64)
}
Source代表一个生成均匀分布在范围[0, 1<<63)的int64值的(伪随机的)资源。
func NewSource
func NewSource(seed int64) Source
使用给定的种子创建一个伪随机资源。
type Rand
type Rand struct {
// 内含隐藏或非导出字段
}
Rand生成服从多种分布的随机数。
func New
func New(src Source) *Rand
返回一个使用src生产的随机数来生成其他各种分布的随机数值的*Rand。
func (*Rand) Seed
func (r *Rand) Seed(seed int64)
使用给定的seed来初始化生成器到一个确定的状态。
func (*Rand) Int
func (r *Rand) Int() int
返回一个非负的伪随机int值。
func (*Rand) Int31
func (r *Rand) Int31() int32
返回一个int32类型的非负的31位伪随机数。
func (*Rand) Int63
func (r *Rand) Int63() int64
返回一个int64类型的非负的63位伪随机数。
func (*Rand) Uint32
func (r *Rand) Uint32() uint32
返回一个uint32类型的非负的32位伪随机数。
func (*Rand) Intn
func (r *Rand) Intn(n int) int
返回一个取值范围在[0,n)的伪随机int值,如果n<=0会panic。
func (*Rand) Int31n
func (r *Rand) Int31n(n int32) int32
返回一个取值范围在[0,n)的伪随机int32值,如果n<=0会panic
func (*Rand) Int63n
func (r *Rand) Int63n(n int64) int64
返回一个取值范围在[0,n)的伪随机int64值,如果n<=0会panic。
func (*Rand) Float32
func (r *Rand) Float32() float32
返回一个取值范围在[0.0, 1.0)的伪随机float32值。
func (*Rand) Float64
func (r *Rand) Float64() float64
返回一个取值范围在[0.0, 1.0)的伪随机float64值。
func (*Rand) NormFloat64
func (r *Rand) NormFloat64() float64
返回一个服从标准正态分布(标准差=1,期望=0)、取值范围在[-math.MaxFloat64, +math.MaxFloat64]的float64值
如果要生成不同的正态分布值,调用者可用如下代码调整输出:
sample = NormFloat64() * 标准差 + 期望
func (*Rand) ExpFloat64
func (r *Rand) ExpFloat64() float64
返回一个服从标准指数分布(率参数=1,率参数是期望的倒数)、取值范围在(0, +math.MaxFloat64]的float64值
如要生成不同的指数分布值,调用者可用如下代码调整输出:
sample = ExpFloat64() / 率参数
func (*Rand) Perm
func (r *Rand) Perm(n int) []int
返回一个有n个元素的,[0,n)范围内整数的伪随机排列的切片。
type Zipf
type Zipf struct {
// 内含隐藏或非导出字段
}
Zipf生成服从齐普夫分布的随机数。
func NewZipf
func NewZipf(r *Rand, s float64, v float64, imax uint64) *Zipf
NewZipf返回一个[0, imax]范围内的齐普夫随机数生成器。
齐普夫分布:值k出现的几率p(k)正比于(v+k)**(-s),其中s>1且k>=0且v>=1。
func (*Zipf) Uint64
func (z *Zipf) Uint64() uint64
Uint64返回一个服从Zipf对象描述的齐普夫分布的随机数。
func Seed
func Seed(seed int64)
使用给定的seed将默认资源初始化到一个确定的状态;如未调用Seed,默认资源的行为就好像调用了Seed(1)。
func Int
func Int() int
返回一个非负的伪随机int值。
func Int31
func Int31() int32
返回一个int32类型的非负的31位伪随机数。
func Int63
func Int63() int64
返回一个int64类型的非负的63位伪随机数。
func Uint32
func Uint32() uint32
返回一个uint32类型的非负的32位伪随机数。
func Intn
func Intn(n int) int
返回一个取值范围在[0,n)的伪随机int值,如果n<=0会panic。
func Int31n
func Int31n(n int32) int32
返回一个取值范围在[0,n)的伪随机int32值,如果n<=0会panic。
func Int63n
func Int63n(n int64) int64
返回一个取值范围在[0, n)的伪随机int64值,如果n<=0会panic。
func Float32
func Float32() float32
返回一个取值范围在[0.0, 1.0)的伪随机float32值。
func Float64
func Float64() float64
返回一个取值范围在[0.0, 1.0)的伪随机float64值。
func NormFloat64
func NormFloat64() float64
返回一个服从标准正态分布(标准差=1,期望=0)、取值范围在[-math.MaxFloat64, +math.MaxFloat64]的float64值
如果要生成不同的正态分布值,调用者可用如下代码调整输出:
sample = NormFloat64() * 标准差 + 期望
func ExpFloat64
func ExpFloat64() float64
返回一个服从标准指数分布(率参数=1,率参数是期望的倒数)、取值范围在(0, +math.MaxFloat64]的float64值
如要生成不同的指数分布值,调用者可用如下代码调整输出:
sample = ExpFloat64() / 率参数
func Perm
func Perm(n int) []int
返回一个有n个元素的,[0,n)范围内整数的伪随机排列的切片。
简单随机数示例
- 使用Seed种子确定状态执行Rand
//该资源会在程序每次运行时都产生确定的序列。
//如果需要每次运行产生不同的序列,应使用Seed函数进行初始化。
//使用time.Now().Unix()随机Seed状态 不使用这个初始化Seed后,
//data := rand.Int63n(1)
//
//fmt.Println(data) //每次输出都是1
//每次输出都一样
rand.Seed(time.Now().Unix()) //同一秒执行的话 data会相同 可换为.UnixNano() 纳米时间戳
//data为 [0-10)随机数 数值为int64型
data := rand.Int63n(10)
fmt.Println(data)
- 使用rand.New初始化状态执行Rand
rander := rand.New(rand.NewSource(time.Now().UnixNano()))
n1 := rander.Int63n(10)
fmt.Println(n1)