当前位置: 首页 > news >正文

go的math/rand随机数生成器

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

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

一、基础用法

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

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

二、随机种子

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

1. rand.seed()

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

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

优点:简单直接

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

package mainimport ("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 mainimport ("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. 注意

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

http://www.lryc.cn/news/494638.html

相关文章:

  • JiaJia-CP-1,2,3的WP(2)
  • 3DMAX星空图像生成器插件使用方法详解
  • ROS2 系列学习教程(总目录)
  • [GKCTF 2021]签到
  • Kubernetes——part11 云原生中间件上云部署 Rocketmqkafkazookeeper
  • ip租期到了
  • 鸿蒙系统(harmony)支持Android应用的双框架技术架构分析
  • 面积等效原理
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(四):JMeter中BeanShell内置方法使用
  • 大小写转换
  • 手机镜头组如此突出,考虑恢复以前设计
  • 浅谈人工智能之基于容器云进行图生视频大模型搭建
  • 大型复杂项目管理怎么结合传统与敏捷
  • 家校通小程序实战教程04教师管理
  • UI控件使用说明
  • 树莓派2安装jupyterlab以便更好的编程体验
  • 计算机网络常见面试题总结(上)
  • k8s 亲和性之Affinity
  • SpringBoot 插件化开发模式
  • 基于树莓派的安保巡逻机器人--项目介绍
  • Python学习笔记8-函数1
  • 如何使用ST7789展现图片?[ESP--4]
  • 【QNX+Android虚拟化方案】129 - USB眼图参数配置
  • 【机器学习】探索机器学习决策树算法的奥秘
  • K8S版本和istio版本的对照关系
  • 嵌入式硬件实战提升篇(三)商用量产电源设计方案 三路电源输入设计 电源管理 多输入供电自动管理 DCDC降压
  • 【机器学习】机器学习的基本分类-监督学习-逻辑回归-Sigmoid 函数
  • EasyDarwin搭建直播推流服务
  • 无人机数据处理系统:原理与核心系统
  • DLL中的inline static成员变量:Windows开发中的常见陷阱