zoukankan      html  css  js  c++  java
  • Go随机数的使用

    随机数使用比较广泛,例如,抽奖、均衡等等。

    下面简单说明其使用方法。

    Example1

    package main
    
    import (
            "log"
            "math/rand"
    )
    
    func main() {
            i := rand.Intn(3)
            log.Println(i)
    }
    

    output:

    $ ./t
    2018/02/24 11:40:58 2
    $ ./t
    2018/02/24 11:40:59 2
    $ ./t
    2018/02/24 11:41:00 2
    $ ./t
    2018/02/24 11:41:01 2
    $ ./t
    2018/02/24 11:41:02 2
    $ ./t
    2018/02/24 11:41:02 2
    $ ./t
    2018/02/24 11:41:03 2
    $ ./t
    2018/02/24 11:41:04 2

    其中

    rand.Intn(n int)

    返回[0,n)之间的随机数

    每次执行时得到的结果都是一样的。

    没有调用Seed时, 默认使用Seed(1)。种子不变,产生的随机数就会不变。

    Example2

    package main
    
    import (
            "log"
            "math/rand"
            "time"
    )
    
    func main() {
            rand.Seed(time.Now().UnixNano())
            i := rand.Intn(3)
            log.Println(i)
    }
    

    output

    $ ./t
    2018/02/24 11:43:29 0
    $ ./t
    2018/02/24 11:43:31 2
    $ ./t
    2018/02/24 11:43:33 1
    $ ./t
    2018/02/24 11:43:34 2
    $ ./t
    2018/02/24 11:43:35 0
    $ ./t
    2018/02/24 11:43:36 2
    $ ./t
    2018/02/24 11:43:37 1
    $ ./t
    2018/02/24 11:43:38 1
    $ ./t
    2018/02/24 11:43:39 2
    $ ./t
    2018/02/24 11:43:40 2
    $ ./t
    2018/02/24 11:43:44 0

    使用时间作为种子,输出完全随机数。

    Example3

    package main
    
    import (
            "log"
            "math/rand"
            "time"
    )
    
    
    func main() {
            rand.Seed(time.Now().UnixNano())
            log.Println(rand.Perm(3))
    }
    

    output:

    $ ./t
    2018/02/24 12:04:27 [0 1 2]
    $ ./t
    2018/02/24 12:04:28 [0 2 1]
    $ ./t
    2018/02/24 12:04:30 [0 2 1]
    $ ./t
    2018/02/24 12:04:32 [0 1 2]

    Perm(n)产生[0,n)的伪随机序列。

    关于种子

    随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。

    种子一般使用当前的系统时间,这是完全随机的。

  • 相关阅读:
    【读书笔记】《暗时间》刘未鹏
    HDU4389:X mod f(x)(数位DP)
    尴尬的三个星期
    解决一般图匹配的带花树算法
    【Linux常用工具】03. Linux性能测试工具ab
    hdu 1176 免费馅饼(nyist 613)
    删除系统更新后留下的文件夹
    zoj 1109 : Language of FatMouse
    设计模式之Inheritance versus Parameterized Types 继承和参数化类型
    hibernate的查询缓存和二级缓存的配合使用
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/8465076.html
Copyright © 2011-2022 走看看