首頁 > 軟體

一文帶你瞭解Go語言標準庫math和rand的常用函數

2022-12-19 14:01:21

math 標準庫

math 標準庫提供了一些 常數如 int64 型別的最大值、float64 型別的最大值等,和常用的數學計算函數。

常用函數

函數說明
Abs(x float64) float64傳入 x 引數,返回 x 的絕對值
Max(x, y float64) float64傳入 x、y 引數,返回 x 與 y 中的最大值
Min(x, y float64) float64傳入 x、y 引數,返回 x 和 y 中的最小值
Ceil(x float64) float64傳入 x 引數,返回一個大於等於 x 的最小整數值,也就是向上取整
Ceil(x float64) float64傳入 x 引數,返回一個小於等於 x 的最小整數值,也就是向下取整
Trunc(x float64) float64傳入 x 引數,返回浮點數 x 的整數部分,使用 Floor 函數也能實現
Dim(x, y float64) float64傳入 x、y 引數,返回 x-y 與 0 中最大的值
Mod(x, y float64) float64對 x / y 進行取餘運算 x % y
Pow(x, y float64) float64計算 x 的 y 次冪
Sqrt(x float64) float64對 x 開平方
Cbrt(x float64) float64對 x 開立方
Modf(f float64) (int float64, frac float64)分別取出 f 的整數部分和小數部分

如果想了解更多函數介紹和使用,可以到 pkg.go.dev/math 進行檢視。

Abs 函數

Abs(x float64) float64:返回 x 的絕對值。 範例:

import (
    "fmt"
    "math"
)

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

Max 函數

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

import (
    "fmt"
    "math"
)

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

Min 函數

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

import (
    "fmt"
    "math"
)

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

Ceil

Ceil(x float64) float64:返回一個大於等於 x 的最小整數值,也就是向上取整。 範例:

import (
    "fmt"
    "math"
)

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

Floor 函數

Ceil(x float64) float64:返回一個小於等於 x 的最小整數值,也就是向下取整。 範例:

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 函數也能實現。 範例:

import (
    "fmt"
    "math"
)

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

Dim 函數

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

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。 範例:

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 次冪。 範例:

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 開平方。 範例:

import (
    "fmt"
    "math"
)

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

Cbrt 函數

Cbrt(x float64) float64:對 x 開立方。 範例:

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 引數,小數部分。 範例:
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返回一個 0 到 n 中(不包括 n)的 int 型別的非負偽亂數
Int31() int32返回一個 int32 型別的非負的偽亂數
Uint32() uint32返回一個 uint32 型別的非負的偽亂數
Int31n(n int32) int32返回一個 0 到 n 中(不包括 n)的 int32 型別的非負偽亂數
Int63() int64返回一個 int64 型別的非負的偽亂數
Uint64() uint64返回一個 uint64 型別的非負的偽亂數
Int63n(n int64) int64返回一個 0 到 n 中(不包括 n)的 int64 型別的非負偽亂數
Float32() float32返回一個 0.0 到 1.0 中(不包括 1.0)的 float32 型別的非負偽亂數
Float64() float64返回一個 0.0 到 1.0 中(不包括 1.0)的 float64 型別的非負偽亂數
Seed(seed int64)設定隨機種子,使得每次獲取亂數的值都不一樣

如果想了解更多函數介紹和使用,可以到 pkg.go.dev/math/rand 進行檢視。

程式碼範例

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 函數進行設定:

import (
    "fmt"
    "math/rand"
    "time"
)

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

使用 Seed 函數設定隨機種子,將當前時間的秒數作為引數。後續多次獲取亂數的值將不會一直一樣。

小結

本文介紹了標準庫 mathrand 的常用函數的用法,並通過例子進行說明。

math 庫裡雖說有最大值和最小值比較,但是形參型別必須是浮點型,如果我們想比較的是整型的最大最小值,就得自己封裝函數。

獲取亂數時,不要忘記設定隨機種子,否則多次獲取到的亂數將會是一樣的。

以上就是一文帶你瞭解Go語言標準庫math和rand的常用函數的詳細內容,更多關於Go語言math rand的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com