目录
  • 包"math/rand"
  • 随机数种子
  • 随机函数
    • rand.Int()
    • rand.Intn(n)
  • 实例
    • 其他随机函数
      • 按类型随机类
      • 指定随机范围类
      • 伪随机排列的切片
      • 生成标准正态分布
      • 生成标准指数分布

    包"math/rand"

    随机数生成器,可以生成 整型或浮点型 的伪随机数。

    随机数种子

    不同的种子生成不同的随机数,无种子编译后运行的结果是定值。

    通常以时钟作为参数初始化,rand.Seed(time.Now().UnixNano())。

    随机函数

    rand.Int()

    返回一个随机整数

    package main
     
    import (
        "fmt"
        "math/rand"
        "time"
    )
     
    func main() {
        nums := make([]int, 3)
        rand.Seed(time.Now().UnixNano())
        for j := 0; j < 10; j++ {
            for i := 0; i < 3; i++ {
                nums[i] = rand.Int()
                fmt.Print(nums[i])
                fmt.Print("\t")
            }
            fmt.Println()
        }
    }
    

    输出样例:

    8547983782177664082 3052552994446827557 8765581018699603124

    5361649810688880538 7247555699230090626 6921521756094709862

    7061225496098313961 4043787731930393944 4881510333544611431

    2742623498123161832 8826061491064266771 7540769746514898360

    1640562288017497602 7737908637884326151 927535944994878966

    7393177581525888978 6511469144479537097 5004275440415177087

    88816382525065439     4249346871495670764 8192005441386526629

    5523554829668683712 69312977258692669     6584352354533757392

    3124007232705319196 5635727296343069158 4284023996891098234

    3861142140259007378 4879978992907007455 473741157600402359

    rand.Intn(n)

    返回0~n间不包括n的非负整数

    package main
     
    import (
        "fmt"
        "math/rand"
        "time"
    )
     
    func main() {
        nums := make([]int, 8)
        rand.Seed(time.Now().UnixNano())
        for j := 0; j < 10; j++ {
            for i := 0; i < 8; i++ {
                nums[i] = rand.Intn(100)
                fmt.Print(nums[i])
                fmt.Print("\t")
    

    输出样例: 

    40    63    3    47    76    78    21    44    
    43    40    12    87    94    90    97    68    
    0    47    14    71    42    52    20    72    
    86    57    78    65    53    77    75    70    
    76    26    63    40    57    75    77    82    
    86    4    46    25    2    67    46    0    
    53    64    70    37    59    41    47    63    
    80    3    85    42    1    47    31    7    
    2    6    2    40    33    49    30    32    
    68    90    74    51    40    57    92    97

    注:   rand.Intn(100) 与 rand.Int()%100 效果相近。

    实例

    红球 1-33 选择6个 不能重复;蓝球 1-16 选择1个;蓝球和红球可以重复

    package main
     
    import (
        "fmt"
        "math/rand"
        "time"
    )
     
    func main() {
        red := make([]int, 6)
        rand.Seed(time.Now().UnixNano())
     
        for i := 0; i < len(red); i++ {
            t := rand.Intn(33) + 1
            for j := 0; j < i; j++ {
                if t == red[j] {
                    t = rand.Intn(33) + 1
                    j--
                }
            }
            red[i] = t
        }
        fmt.Println("红球:", red, "\n蓝球:", rand.Intn(16)+1)
    }
    

    输出:

    红球: [25 28 19 26 33 14]
    蓝球: 7

    其他随机函数

    按类型随机类

    func (r *Rand) Int31() int32
    func (r *Rand) Int63() int64
    func (r *Rand) Uint32() uint32
    func (r *Rand) Float32() float32  // 返回一个取值范围在[0.0, 1.0)的伪随机float32值
    func (r *Rand) Float64() float64  // 返回一个取值范围在[0.0, 1.0)的伪随机float64值
    

    指定随机范围类

    func (r *Rand) Int31n(n int32) int32
    func (r *Rand) Int63n(n int64) int64
    

    伪随机排列的切片

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

    fmt.Println(rand.Perm(10)) // [3 7 0 1 9 2 4 5 6 8]
    

    生成标准正态分布

    返回一个服从标准正态分布(标准差=1,期望=0)

    取值范围在[-math.MaxFloat64, +math.MaxFloat64]的float64值。

    fmt.Println(rand.NormFloat64())
    //生成不同的正态分布值
    fmt.Println(rand.NormFloat64() * 标准差 + 期望)
    

    生成标准指数分布

    返回一个服从标准指数分布(率参数=1,率参数是期望的倒数)

    取值范围在(0, +math.MaxFloat64]的float64值。

    fmt.Println(rand.ExpFloat64())
    //生成不同的指数分布值
    fmt.Println(rand.ExpFloat64() / 率参数)

    详解Go语言中rand(随机数)包的使用

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。