伪随机数生成器,默认情况下随机数种子是固定的,

注意:固定的随机数种子每次生成的随机数都是相同的随机数序列

一、基础用法

math/rand 包提供了随机数生成的方法。常用的函数包括:

  • rand.Int():返回一个伪随机整数
  • rand.Float64():返回一个伪随机浮点数,范围是 [0.0, 1.0)
  • rand.Intn(n):返回一个伪随机整数,范围是 [0, n)

二、随机种子

默认情况下math/rand使用一个固定的种子值,会生成相同的随机数序列,生成不同的随机数序列需要设置一个动态的随机数种子,例如当前使用时间。

1. rand.seed()

初始化默认的全局随机数生成器

作用范围:修改全局随机数生成器的种子

优点:简单直接

缺点:不适用于多线程(全局状态会被竞争)

package main

import (
"fmt"
"math/rand"
"time"
) func main() {
// 使用当前时间戳设置种子,纳秒级
rand.Seed(time.Now().UnixNano()) // 生成随机数
fmt.Println("Random Int:", rand.Int())
fmt.Println("Random Intn(10):", rand.Intn(10))
}

2. rand.NewSource()

创建一个新的随机数生成器源(Source),通过 rand.New 基于此 Source创建一个独立的随机数生成器

优点:线程安全,可创建多个独立生成器

缺点:需要额外配置

使用年月日就可以设置/当年/当月/当天生成相同的随机数值,比如:

package main

import (
"fmt"
"math/rand"
"time"
) func main() {
seed := int64(time.Now().Day())
source := rand.NewSource(seed)
r := rand.New(source)
num := r.Int63n(100)
fmt.Println("随机整数:", num)
}

由此还可以演变出组合比如:把时分秒按照固定比率放大累加后就可设置当前时间或者分钟内生成相同的随机数序列

3. 注意

生成的随机数如果随机数种子设置的类似,他的图形波动曲线会类似,设置可能会无限趋近于一条直线

go的math/rand随机数生成器的更多相关文章

  1. golang之math/rand随机数

    简单的随机数生成,结合时间模块初始化种子 package main import ( "fmt" "math/rand" "time" ) ...

  2. golang——随机数(math/rand包与crypto/rand包)

    1.math/rand 包 1.1.math/rand 包实现了伪随机数生成器 1.2.主要方法 (1)func Seed(seed int64) 设置随机种子,不设置则默认Seed(1) (2)fu ...

  3. 【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  4. 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

    原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器                本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...

  5. Go语言基础之rand(随机数)包

    在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto/rand",  对应两种应用场景. "math/rand ...

  6. [BZOJ3671][UOJ#6][NOI2014]随机数生成器

    [BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来 ...

  7. NOI2014 随机数生成器

    随机数生成器 [问题描述] 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来获得随机性.事实上,随机数生成函数也并不是真正的 ...

  8. Linux下对拍脚本与随机数生成器

    对拍脚本 新建一个文档 check.sh 作为对拍脚本. #!/bin/bash while(true)do #死循环 ./data > .in #运行数据生成器,将数据输出到1.in ./st ...

  9. 解密随机数生成器(二)——从java源码看线性同余算法

    Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ...

  10. java随机数生成器

    一.java.lang.Math.Random 调用这个Math.Random()函数能够返回带正号的double值,取值范围是[0.0,1.0)的左闭右开区间,并在该范围内(近似)均匀分布. 二.j ...

随机推荐

  1. AOP实践:java.lang.instrument的使用

    背景 在 rcjp 项目中,需要调用 ASM API(用于字节码处理的开源库)对字节码进行处理,目标是实现对 Java 程序运行时各种对象的动态跟踪,并进一步分析各个对象之间的关系.在此之前,需要考虑 ...

  2. elementUI 表格之合并同类项(包括行和列)

    mergeSpan(tableData, arr) { //["areName","indexCode"] let spanArr = new Array(ta ...

  3. 探索实用的Java工具类

    1.排序 有时需要对集合进行排序.此时可以使用Collections的sort方法. List<Integer> list = new ArrayList<>(); list. ...

  4. shp转featureclass

    public void ConvertShapefileToFeatureClass() { // Create a name object for the source (shapefile) wo ...

  5. css var实现网页换肤

    前情 最近在做需求开发,要求根据后台传来的配置对网页换肤,按以往的换肤思路应该是写好几套样式做切换达到换肤效果,但是现在想做到能根据后台配置动态修改. 原理 通过css3新增变量特性,把颜色定义为变量 ...

  6. influxdb group by(1d) 查询注意事项

    转载请注明出处: 在 InfluxDB 中,默认的时区是 UTC(协调世界时).所有的时间戳在数据写入时默认视为 UTC.这意味着如果没有在插入数据时指定其他时区,InfluxDB 会将所有时间数据处 ...

  7. 关于 Envoy on Windows

    Window Image in hub.cocker.com envoy 的镜像位于 https://hub.docker.com/u/envoyproxy 之下,其中 Windows 包括如下 4 ...

  8. HttpClientFactory in ASP.NET Core 2.1 Part 3: 对处理器使用对外请求中间件

    HttpClientFactory in ASP.NET Core 2.1 Part 3: 对处理器使用对外请求中间件 原文地址:https://www.stevejgordon.co.uk/http ...

  9. NoSQL 述评

    作为主库的 nosql 只有 CockroachDB.TiKV 以及 MongoDB(从4.0后事务似乎可用了),CockrouchDB 已经收费,另外 YugabyteDB 也可选,但大家的反馈都不 ...

  10. (default-compile) on project app: Fatal error compiling: 无效的标记: --release -> [Help 1]

    <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <versio ...