编程笔记 Golang基础 045 math包
编程笔记 Golang基础 045 math包
- 一、math包
- 主要功能
- 常量:
- 函数:
- 数值运算:
- 三角函数:
- 对数函数:
- 随机数相关:
- 二、示例代码一
- 三、示例代码二
- 小结
Go 语言的标准库
math
提供了一系列基础数学函数和常量,用于进行科学计算、几何计算和其他数学相关的操作。以下是一些math
包中的核心功能和函数。
一、math包
主要功能
Go 语言的标准库 math
包主要用于解决各种基础和高级数学运算问题,它提供了大量数学函数和常量,服务于编程中涉及的数学需求。math
包主要解决的问题包括但不限于以下几个方面:
-
三角函数计算:
- 正弦(Sin)、余弦(Cos)、正切(Tan)、反正弦(Asin)、反余弦(Acos)、反正切(Atan)以及相应的双曲函数。
-
指数和对数运算:
- 自然对数(Log,以 e 为底),常用对数(Log10,以 10 为底),指数函数(Exp),幂运算(Pow),以及针对特定场景优化的 Log1p(用于计算 log(1+x) 避免精度损失)。
-
超越函数:
- 幂运算(如平方根Sqrt)、伽马函数(Gamma)、误差函数(Erf)、互补误差函数(Erfc)以及其他特殊函数如 Bessel 函数(J0, J1 等)。
-
浮点数操作:
- 浮点数的绝对值(Abs)、取整(Floor, Ceil, Trunc)、四舍五入(Round)、分解为分数和指数形式(Frexp 和 Ldexp)、判断是否为无穷大或NaN(IsInf, IsNaN)以及处理浮点数边界问题(如最小非零正浮点数)。
-
几何计算:
- 求直角三角形边长关系(如 Hypot 函数计算欧几里得范数),以及模运算(Mod)。
-
数学常数:
- 提供了常用的数学常数,如圆周率 Pi 和自然对数的底数 e。
-
比较和取值限制:
- 提供了 Min 和 Max 函数来获取两个数之间的较大或较小值。
常量:
math.MaxFloat64
和math.SmallestNonzeroFloat64
分别表示 IEEE-754 浮点数的最大值和最小非零正值。math.Pi
表示圆周率 π。math.E
表示自然对数的底数 e。
示例代码
fmt.Printf("float64的最大值是:%.f\n", math.MaxFloat64)fmt.Printf("float64的最小值是:%.f\n", math.SmallestNonzeroFloat64)fmt.Printf("float32的最大值是:%.f\n", math.MaxFloat32)fmt.Printf("float32的最小值是:%.f\n", math.SmallestNonzeroFloat32)fmt.Printf("Int8的最大值是:%d\n", math.MaxInt8)fmt.Printf("Int8的最小值是:%d\n", math.MinInt8)fmt.Printf("Uint8的最大值是:%d\n", math.MaxUint8)fmt.Printf("Int16的最大值是:%d\n", math.MaxInt16)fmt.Printf("Int16的最小值是:%d\n", math.MinInt16)fmt.Printf("Uint16的最大值是:%d\n", math.MaxUint16)fmt.Printf("Int32的最大值是:%d\n", math.MaxInt32)fmt.Printf("Int32的最小值是:%d\n", math.MinInt32)fmt.Printf("Uint32的最大值是:%d\n", math.MaxUint32)fmt.Printf("Int64的最大值是:%d\n", math.MaxInt64)fmt.Printf("Int64的最小值是:%d\n", math.MinInt64)fmt.Printf("圆周率默认为:%.200f\n", math.Pi)
运行结果
float64的最大值是:179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
float64的最小值是:0
float32的最大值是:340282346638528859811704183484516925440
float32的最小值是:0
Int8的最大值是:127
Int8的最小值是:-128
Uint8的最大值是:255
Int16的最大值是:32767
Int16的最小值是:-32768
Uint16的最大值是:65535
Int32的最大值是:2147483647
Int32的最小值是:-2147483648
Uint32的最大值是:4294967295
Int64的最大值是:9223372036854775807
Int64的最小值是:-9223372036854775808
圆周率默认为:3.14159265358979311599796346854418516159057617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
函数:
数值运算:
math.Abs(x float64) float64
返回x
的绝对值。math.Ceil(x float64) float64
返回大于或等于x
的最小整数。math.Floor(x float64) float64
返回小于或等于x
的最大整数。math.Pow(x, y float64) float64
返回x
的y
次方。math.Sqrt(x float64) float64
返回x
的平方根。math.Cbrt(x float64) float64
返回x
的立方根。
三角函数:
math.Sin(x float64) float64
返回x
弧度的正弦值。math.Cos(x float64) float64
返回x
弧度的余弦值。math.Tan(x float64) float64
返回x
弧度的正切值。- 还有它们的反函数如
math.Asin
,math.Acos
,math.Atan
,以及双角形式如math.Sinh
,math.Cosh
,math.Tanh
等。
对数函数:
math.Log(x float64) float64
返回x
的自然对数(以e
为底)。math.Log10(x float64) float64
返回x
的以10为底的对数。math.Exp(x float64) float64
返回e
的x
次方。
随机数相关:
虽然 math
包本身不直接提供随机数生成器,但 math/rand
子包提供了生成伪随机数的功能:
rand.Intn(n int) int
返回一个在 [0, n) 范围内的随机整数。rand.Float64() float64
返回 [0.0, 1.0) 范围内的随机浮点数。
要使用这些函数,你需要导入对应的包:
import ("fmt""math"
)func main() {// 示例用法val := math.Sin(math.Pi / 2)fmt.Println(val)
}
此外,math
包还包含其他高级数学函数,比如求最大公约数 (GCD
)、最小二乘解 (Sqrt
)、反正切函数的完整范围版本 (Atan2
) 等。通过查阅官方文档可以获得更完整的函数列表和详细说明。
二、示例代码一
package mainimport ("fmt""math"
)func main() {/*取绝对值,函数签名如下:func Abs(x float64) float64*/fmt.Printf("[-3.14]的绝对值为:[%.2f]\n", math.Abs(-3.14))/*取x的y次方,函数签名如下:func Pow(x, y float64) float64*/fmt.Printf("[2]的16次方为:[%.f]\n", math.Pow(2, 16))/*取余数,函数签名如下:func Pow10(n int) float64*/fmt.Printf("10的[3]次方为:[%.f]\n", math.Pow10(3))/*取x的开平方,函数签名如下:func Sqrt(x float64) float64*/fmt.Printf("[64]的开平方为:[%.f]\n", math.Sqrt(64))/*取x的开立方,函数签名如下:func Cbrt(x float64) float64*/fmt.Printf("[27]的开立方为:[%.f]\n", math.Cbrt(27))/*向上取整,函数签名如下:func Ceil(x float64) float64*/fmt.Printf("[3.14]向上取整为:[%.f]\n", math.Ceil(3.14))/*向下取整,函数签名如下:func Floor(x float64) float64*/fmt.Printf("[8.75]向下取整为:[%.f]\n", math.Floor(8.75))/*取余数,函数签名如下:func Floor(x float64) float64*/fmt.Printf("[10/3]的余数为:[%.f]\n", math.Mod(10, 3))/*分别取整数和小数部分,函数签名如下:func Modf(f float64) (int float64, frac float64)*/Integer, Decimal := math.Modf(3.14159265358979)fmt.Printf("[3.14159265358979]的整数部分为:[%.f],小数部分为:[%.14f]\n", Integer, Decimal)
}
三、示例代码二
生成随机数。
package mainimport ("fmt""math/rand""time"
)func init() {//以时间作为初始化种子rand.Seed(time.Now().UnixNano())
}
func main() {for i := 0; i < 10; i++ {a := rand.Int()fmt.Println(a)}fmt.Println("------------")for i := 0; i < 10; i++ {a := rand.Intn(100)fmt.Println(a)}fmt.Println("------------")for i := 0; i < 10; i++ {a := rand.Float32()fmt.Println(a)}
}
小结
通过这些函数和常量的支持,math
包使得 Go 程序员能够方便地在程序中进行精确的数学计算和分析,覆盖了大多数实际编程中可能遇到的基础数学需求。同时,math
包也是构建更复杂算法和数学应用的基础模块。
相关文章:
编程笔记 Golang基础 045 math包
编程笔记 Golang基础 045 math包 一、math包主要功能常量:函数:数值运算:三角函数:对数函数:随机数相关: 二、示例代码一三、示例代码二小结 Go 语言的标准库 math 提供了一系列基础数学函数和常量…...

[Java 探索者之路] 一个大厂都在用的分布式任务调度平台
分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统,在此环境下,各个任务可以在独立的节点上运行。它有助于提升资源利用率,增强系统扩展性以及提高系统对错误的容忍度。 文章目录 1. 分布式任务调度平台1. 基本概念1.1 任…...

基于JAVA springboot+mybatis智慧生活分享平台设计和实现
基于JAVA springbootmybatis智慧生活分享平台设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…...

详细了解C++中的namespace命名空间
键盘敲烂,月薪过万,同学们,加油呀! 目录 键盘敲烂,月薪过万,同学们,加油呀! 一、命名空间的理解 二、::作用域运算符 三、命名空间(namespace&…...

#WEB前端(HTML属性)
1.实验:a,img 2.IDE:VSCODE 3.记录: a: href插入超链接 默认情况下在本窗口打开链接, target可以设置打开的窗口,parent在父窗口打开,blank新开串口打开,top在顶层串口打开,self为默认在本窗口打开 img: 插入图片 可以插…...
LeetCode---【和的操作】
目录 两数之和我的答案在b站up那里学到的【然后自己复写】 和为 K 的子数组在b站up那里学到的【然后自己复写】 三数之和在b站up那里学到的【然后自己复写】 两数相加【链表】我的半路答案:没有看到是链表在b站up那里学到的【复写失败后整理】 两数之和 我的答案 …...

Docker容器与虚拟化技术:OpenEuler 使用 docker-compose 部署 LNMP
目录 一、实验 1.环境 2.OpenEuler 部署 docker-compose 3.docker-compose 部署 LNMP 二、问题 1.ntpdate未找到命令 2.timedatectl 如何设置时区与时间同步 3.php网页显示时区不对 一、实验 1.环境 (1)主机 表1 主机 系统架构版本IP备注Lin…...

13-微服务初探-自研微服务框架
微服务初探 1. 架构变迁之路 1.1 单体架构 互联网早期,一般的网站应用流量较小,只需要一个应用,将所有的功能代码都部署在一起就可以,这样可以减少开发,部署和维护的成本。 比如说一个电商系统,里面包含…...

LeetCode——二叉树(Java)
二叉树 简介[简单] 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历二叉树层序遍历[中等] 102. 二叉树的层序遍历[中等] 107. 二叉树的层序遍历 II[中等] 199. 二叉树的右视图[简单] 637. 二叉树的层平均值[中等] 429. N 叉树的层序遍历[中等] 515. 在每个…...

LDR6328芯片:智能家居时代的小家电充电革新者
在当今的智能家居时代,小家电的供电方式正变得越来越智能化和高效化。 利用PD(Power Delivery)芯片进行诱骗取电,为后端小家电提供稳定电压的技术,正逐渐成为行业的新宠。在这一领域,LDR6328芯片以其出色的…...

用node写后端环境运行时报错Port 3000 is already in use
解决方法:关闭之前运行的3000端口,操作如下 1.WindowR输入cmd确定,打开命令面板 2.查看本机端口详情 netstat -ano|findstr "3000" 3.清除3000端口 taskkill -pid 41640 -f 最后再重新npm start即可,这里要看你自己项目中package.joson的启动命令是什…...

Git 如何上传本地的所有分支
Git 如何上传本地的所有分支 比如一个本地 git 仓库里定义了两个远程分支,一个名为 origin, 一个名为 web 现在本地有一些分支是 web 远程仓库没有的分支,如何将本地所有分支都推送到 web 这个远程仓库上呢 git push web --all...

【airtest】自动化入门教程(一)AirtestIDE
目录 一、下载与安装 1、下载 2、安装 3、打开软件 二、web自动化配置 1、配置chrome浏览器 2、窗口勾选selenium window 三、新建项目(web) 1、新建一个Airtest项目 2、初始化代码 3、打开一个网页 四、恢复默认布局 五、新建项目…...

ChatGPT支持下的PyTorch机器学习与深度学习技术应用
近年来,随着AlphaGo、无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生,人工智能迎来了新一轮的发展浪潮。尤其是深度学习技术,在许多行业都取得了颠覆性的成果。另外,近年来,Pytorch深度学习框架受…...

Springboot+vue的医药管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的医药管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层…...

C语言:预处理
C语言:预处理 预定义符号#define定义常量定义宏宏与函数对比 #操作符##操作符条件编译头文件包含库文件包含本地文件包含嵌套文件包含 预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。 __FILE__ //…...

计算机网络:路由协议
路由协议简介 路由协议是计算机网络中不可或缺的一部分,它们负责确定数据包从源地址到目的地址的最佳路径。想象一下,如果你是一个数据包,路由协议就像是地图或导航工具,指导你如何到达目的地。 目录 路由协议简介 工作原理简化…...
经典动态规划题目leetcode322. 零钱兑换
题目链接:https://leetcode.cn/problems/coin-change/description/ 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合…...

python 使用curl_cffi 绕过jax3指纹-Cloudflare 5s盾
现在越来越多的网站已经能够通过JA3或者其他指纹信息,来识别你是不是爬虫了。传统的方式比如换UA,加代理是没有任何意义了,所以这个时候我们就需要使用到curl_cffi 了。 1.TLS 指纹是啥? 在绝大多数的网站都已经使用了 HTTPS&am…...
Python3学习笔记39-passlib
passlib处理密码哈希的python包,支持很多哈希算法和工具 bcrypt 安装 pip install passlib[bcrypt] 会安装passlib包和bcrypt两个包 密码哈希与校验 from passlib.context import CryptContext# 创建CryptContext对象,指定加密算法 pwd_context CryptContext…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...