golang学习五:常用数学函数与数组

常用数学函数

  • • 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.39.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(32)) //输出:输出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{123}
    //方式二:短变量方式
    arr2 := [3]int{123}
    //方式三:长度大于初始值个数.长度为4,只给前三个元素赋值,其余元素为默认值
    arr3 := [4]int{123}
    //方式四:赋值时不写长度,数组长度根据元素个数确定
    arr4 := [...]int{123}
  • • 可以通过:**数组名[脚标]**对数组中元素进行操作

    arr := [3]int{123}

    fmt.Println(arr)
    //通过脚标对数组中元素进行重新赋值
    arr[0] = 5
    arr[1] = 6
    arr[2] = 7
    fmt.Println(arr[0], arr[1], arr[2])
  • • 通过len(数组变量)获取数组长度,数组脚标最大值为长度减一,如果超出这个范围将会报错

    arr := [3]int{123}
    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{123}
    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{
        {123},
        {456},
        {789}, //每个元素分行写,最后一个必须有逗号
    }
    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{
        {
            {12},
            {34},
        },
        {
            {56},
            {78},
        },
    }
    fmt.Println(arr)
    //几维数组在操作元素时,数组变量后面就有几个[]
    fmt.Println(arr[0][1][1])


原文始发于微信公众号(杂食的程序员):golang学习五:常用数学函数与数组

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/247324.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!