常用数学函数
-
• math包提供了基本数学常数和数学函数
-
• math包提供的数学常数
// Mathematical constants.
const (
E = 2.71828182845904523536028747135266249775724709369995957496696763
Pi = 3.14159265358979323846264338327950288419716939937510582097494459
Phi = 1.61803398874989484820458683436563811772030917980576286213544862
Sqrt2 = 1.41421356237309504880168872420969807856967187537694807317667974
SqrtE = 1.64872127070012814684865078781416357165377610071014801157507931
SqrtPi = 1.77245385090551602729816748334114518279754945612238712821380779
SqrtPhi = 1.27201964951406896425242246173749149171560804184009624861664038
Ln2 = 0.693147180559945309417232121458176568075500134360255254120680009
Log2E = 1 / Ln2
Ln10 = 2.30258509299404568401799145468436420760110148862877297603332790
Log10E = 1 / Ln10
)
// Floating-point limit values.
// Max is the largest finite value representable by the type.
// SmallestNonzero is the smallest positive, non-zero value representable by the type.
const (
MaxFloat32= 3.40282346638528859811704183484516925440e+38 // 2**127 * (2**24 - 1) / 2**23
SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23)
MaxFloat64= 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52
SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 // 1 / 2**(1023 - 1 + 52)
)
// Integer limit values.
const (
MaxInt8 = 1<<7 - 1
MinInt8 = -1 << 7
MaxInt16 = 1<<15 - 1
MinInt16 = -1 << 15
MaxInt32 = 1<<31 - 1
MinInt32 = -1 << 31
MaxInt64 = 1<<63 - 1
MinInt64 = -1 << 63
MaxUint8 = 1<<8 - 1
MaxUint16 = 1<<16 - 1
MaxUint32 = 1<<32 - 1
MaxUint64 = 1<<64 - 1
)
-
• 列举出常用的数学函数
var i, j float64 = 12.3, 9.6
//向下取整,
fmt.Println(math.Floor(i)) //输出:12
//向上取整
fmt.Println(math.Ceil(i)) //输出:13
//绝对值
fmt.Println(math.Abs(i)) //输出:12.3
//返回值分别整数位和小数位,小数位可能出现误差
num, decimal := math.Modf(i)
fmt.Println(num, decimal)
//返回两个变量中大的值
fmt.Println(math.Max(i, j)) //输出:12.3
//返回两个变量中小的值
fmt.Println(math.Min(i, j)) //输出:9.6
//x的y次方
fmt.Println(math.Pow(3, 2)) //输出:输出9
//四舍五入
fmt.Println(math.Round(i)) //输出:12
随机数
-
• math/rand实现了伪随机数生成器
-
• 在Go语言中随机数需要设置种子,如果不设置种子随机数的结果每次运行都相同。
-
• 默认种子是1,且相同种子产生的随机数是相同的.
-
• 可以使用当前时间的纳秒差计算随机数,在一定程度上保证了种子的唯一性
rand.Seed(time.Now().UnixNano())
fmt.Println(rand.Int63n(10))
数组
数组介绍
• 数组:具有固定长度相同类型元素序列
• 声明数组的语法
//var 对象名 [长度]元素类型
var arr [5]int
fmt.Println(arr) //输出:[0 0 0 0 0]
• 数组就是内存中一段固定长度的连续空间.
• 声明数组后数组就会在内存中开辟一块连续空间,每个值称为数组的元素,且元素值为类型对应的默认值.例如int类型默认值为0,string类型默认值为空字符串
• 数组中每个元素按照顺序都有自己整数类型的脚标,脚标从第一个元素为0向后依次加1
• 数组中实际开发中主要作用是充当临时容器,因为声明一个数组变量比声明多个相同类型变量在操作时更加方便
数组的创建和赋值
-
• 可以在声明数组时可以同时给数组赋值,赋值时要求长度必须大于等于初始值个数
//方式一:完整写法
var arr [3]int = [3]int{1, 2, 3}
//方式二:短变量方式
arr2 := [3]int{1, 2, 3}
//方式三:长度大于初始值个数.长度为4,只给前三个元素赋值,其余元素为默认值
arr3 := [4]int{1, 2, 3}
//方式四:赋值时不写长度,数组长度根据元素个数确定
arr4 := [...]int{1, 2, 3}
-
• 可以通过:**数组名[脚标]**对数组中元素进行操作
arr := [3]int{1, 2, 3}
fmt.Println(arr)
//通过脚标对数组中元素进行重新赋值
arr[0] = 5
arr[1] = 6
arr[2] = 7
fmt.Println(arr[0], arr[1], arr[2])
-
• 通过len(数组变量)获取数组长度,数组脚标最大值为长度减一,如果超出这个范围将会报错
arr := [3]int{1, 2, 3}
fmt.Println(len(arr))//输出:3
arr[3]=5//错误信息:invalid array index 3 (out of bounds for 3-element array)
数组是值类型
-
• 在Go语言中数组是值类型,和之前学习的int或float64等类型相同,把一个数组变量赋值给另一个数组变量时为复制副本,重新开辟一块空间
-
• 使用==比较数组中值是否相等
arr := [3]int{1, 2, 3}
arr2:=arr
fmt.Println(arr,arr2)
fmt.Printf("%p %p",&arr,&arr2)//地址不同
fmt.Println(arr==arr2)
二维数组
-
• 二维数组表示一个数组变量中每个元素又是一个数组变量
-
• 声明二维数组的语法
var arr [n][m]int
-
• 使用 arr[n]时返回一个 arr[m]类型的数组
二维数组的使用
-
• 声明并创建二维数组
//写在同一行,最后一个元素后面不需要有逗号
//arr6:=[3][3]int{{1,2,3},{4,5,6},{7,8,9}}
arr := [3][3]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}, //每个元素分行写,最后一个必须有逗号
}
arr0 := arr[0]
fmt.Println(arr0[0], arr0[1], arr[2])
//上面等效于下面的写法.习惯上多下下面的方式
fmt.Println(arr[0][0], arr[0][1], arr[0][2])
多维数组
-
• 理论上支持无限多维数组(只要内存够用)
-
• 三维数组可以理解成,一维数组中每个元素都是二维数组.四维数组理解成,一个一维数组中每个元素都是三维数组
-
• 无论是几维数组,都符号元素类型是相同的
-
• 实际开发中多维数组使用并不多,在一定程度上,程序员使用多维数组很容易出错
arr := [2][2][2]int{
{
{1, 2},
{3, 4},
},
{
{5, 6},
{7, 8},
},
}
fmt.Println(arr)
//几维数组在操作元素时,数组变量后面就有几个[]
fmt.Println(arr[0][1][1])
原文始发于微信公众号(杂食的程序员):golang学习五:常用数学函数与数组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/247324.html