首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >一文了解 Go 标准库 math 和 rand 的常用函数

一文了解 Go 标准库 math 和 rand 的常用函数

原创
作者头像
陈明勇
发布2023-10-15 23:20:34
发布2023-10-15 23:20:34
7270
举报
文章被收录于专栏:Go技术干货Go技术干货

math 标准库

math 标准库提供了一些 常量如 int64 类型的最大值、float64 类型的最大值等,和常用的数学计算函数。

常用函数

函数

说明

Abs(x float64) float64

传入 x 参数,返回 x 的绝对值

Max(x, y float64) float64

传入 xy 参数,返回 xy 中的最大值

Min(x, y float64) float64

传入 xy 参数,返回 xy 中的最小值

Ceil(x float64) float64

传入 x 参数,返回一个大于等于 x 的最小整数值,也就是向上取整

Floor(x float64) float64

传入 x 参数,返回一个小于等于 x 的最小整数值,也就是向下取整

Trunc(x float64) float64

传入 x 参数,返回浮点数 x 的整数部分,使用 Floor 函数也能实现

Dim(x, y float64) float64

传入 xy 参数,返回 x-y0 中最大的值

Mod(x, y float64) float64

x / y 进行取余运算 x % y

Pow(x, y float64) float64

计算 xy 次幂

Sqrt(x float64) float64

x 开平方

Cbrt(x float64) float64

x 开立方

Modf(f float64) (int float64, frac float64)

分别取出 f 的整数部分和小数部分

如果想了解更多函数介绍和使用,可以到 https://pkg.go.dev/math 进行查看。

Abs 函数

Abs(x float64) float64:返回 x 的绝对值。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Abs(-3.14)) // 3.14
}

Max 函数

Max(x, y float64) float64:返回 xy 中的最大值。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Max(1.5, 2.5)) // 2.5
}

Min 函数

Min(x, y float64) float64:返回 xy 中的最小值。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Min(1.5, 2.5)) // 1.5
}

Ceil

Ceil(x float64) float64:返回一个大于等于 x 的最小整数值,也就是向上取整。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Ceil(1.4)) // 2
    fmt.Println(math.Ceil(2))   // 2
}

Floor 函数

Ceil(x float64) float64:返回一个小于等于 x 的最小整数值,也就是向下取整。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Floor(1.4)) // 1
    fmt.Println(math.Floor(1))   // 1
}

Trunc 函数

Trunc(x float64) float64:返回浮点数 x 的整数部分,使用 Floor 函数也能实现。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Trunc(1.4)) // 1
}

Dim 函数

Dim(x, y float64) float64:返回 x-y0 中最大的值。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Dim(2.0, 1.0)) // 1
    fmt.Println(math.Dim(1.0, 2.0)) // 0
}

Mod 函数

Mod(x, y float64) float64:对 x / y 进行取余运算 x % y

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Mod(5.0, 3.0)) // 3
    fmt.Println(math.Mod(3.0, 3.0)) // 0
}

Pow 函数

Pow(x, y float64) float64:计算 xy 次幂。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Pow(2, 1)) // 2
    fmt.Println(math.Pow(2, 5)) // 32
}

Sqrt 函数

Sqrt(x float64) float64:对 x 开平方。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Sqrt(64)) // 8
    fmt.Println(math.Sqrt(16)) // 4
}

Cbrt 函数

Cbrt(x float64) float64:对 x 开立方。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Cbrt(64)) // 4
    fmt.Println(math.Cbrt(8))  // 2
}

Modf 函数

Modf(f float64) (int float64, frac float64):分别取出 f 的整数部分和小数部分。

  • int 参数,整数部分。
  • frac 参数,小数部分。

示例:

代码语言:go
复制
import (
    "fmt"
    "math"
)

func main() {
    integer, decimal := math.Modf(3.1415)
    fmt.Printf("整数部分:%.f 小数部分:%.4f", integer, decimal) // 整数部分:3 小数部分:0.1415
}

rand

rand 标准库提供了多个获取不同类型随机数的函数。

常用函数

函数

说明

Int() int

返回一个 int 类型的非负的伪随机数

Intn(n int) int

返回一个 0n 中(不包括 n)的 int 类型的非负伪随机数

Int31() int32

返回一个 int32 类型的非负的伪随机数

Uint32() uint32

返回一个 uint32 类型的非负的伪随机数

Int31n(n int32) int32

返回一个 0n 中(不包括 n)的 int32 类型的非负伪随机数

Int63() int64

返回一个 int64 类型的非负的伪随机数

Uint64() uint64

返回一个 uint64 类型的非负的伪随机数

Int63n(n int64) int64

返回一个 0n 中(不包括 n)的 int64 类型的非负伪随机数

Float32() float32

返回一个 0.01.0 中(不包括 1.0)的 float32 类型的非负伪随机数

Float64() float64

返回一个 0.01.0 中(不包括 1.0)的 float64 类型的非负伪随机数

Seed(seed int64)

设置随机种子,使得每次获取随机数的值都不一样

如果想了解更多函数介绍和使用,可以到 https://pkg.go.dev/math/rand 进行查看。

代码示例

代码语言:go
复制
import (
    "fmt"
    "math/rand"
)

func main() {
    fmt.Println(rand.Int())      // 5577006791947779410
    fmt.Println(rand.Intn(10))   // 7
    fmt.Println(rand.Int31())    // 1427131847
    fmt.Println(rand.Uint32())   // 1879968118
    fmt.Println(rand.Int31n(10)) // 1
    fmt.Println(rand.Int63())    // 6334824724549167320
    fmt.Println(rand.Uint64())   // 9828766684487745566
    fmt.Println(rand.Int63n(10)) // 8
    fmt.Println(rand.Float32())  // 0.09696952
    fmt.Println(rand.Float64())  // 0.30091186058528707
}

多次运行上述代码,发现获取到的随机数都是一样的,这是因为我们没有设置随机种子。可以通过 Seed 函数进行设置:

代码语言:go
复制
import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    rand.Seed(time.Now().Unix())
    fmt.Println(rand.Intn(10))
}

使用 Seed 函数设置随机种子,将当前时间的秒数作为参数。后续多次获取随机数的值将不会一直一样。

小结

本文介绍了标准库 mathrand 的常用函数的用法,并通过例子进行说明。

math 库里虽说有最大值和最小值比较,但是形参类型必须是浮点型,如果我们想比较的是整型的最大最小值,就得自己封装函数。

获取随机数时,不要忘记设置随机种子,否则多次获取到的随机数将会是一样的。

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • math 标准库
    • Abs 函数
    • Max 函数
    • Min 函数
    • Ceil
    • Floor 函数
    • Trunc 函数
    • Dim 函数
    • Mod 函数
    • Pow 函数
    • Sqrt 函数
    • Cbrt 函数
    • Modf 函数
  • rand
    • 代码示例
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档