詳解Go語言中rand(隨機數(shù))包的使用
包"math/rand"
隨機數(shù)生成器,可以生成 整型或浮點型 的偽隨機數(shù)。
隨機數(shù)種子
不同的種子生成不同的隨機數(shù),無種子編譯后運行的結果是定值。
通常以時鐘作為參數(shù)初始化,rand.Seed(time.Now().UnixNano())。
隨機函數(shù)
rand.Int()
返回一個隨機整數(shù)
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
nums := make([]int, 3)
rand.Seed(time.Now().UnixNano())
for j := 0; j < 10; j++ {
for i := 0; i < 3; i++ {
nums[i] = rand.Int()
fmt.Print(nums[i])
fmt.Print("\t")
}
fmt.Println()
}
}
輸出樣例:
8547983782177664082 3052552994446827557 8765581018699603124
5361649810688880538 7247555699230090626 6921521756094709862
7061225496098313961 4043787731930393944 4881510333544611431
2742623498123161832 8826061491064266771 7540769746514898360
1640562288017497602 7737908637884326151 927535944994878966
7393177581525888978 6511469144479537097 5004275440415177087
88816382525065439 4249346871495670764 8192005441386526629
5523554829668683712 69312977258692669 6584352354533757392
3124007232705319196 5635727296343069158 4284023996891098234
3861142140259007378 4879978992907007455 473741157600402359
rand.Intn(n)
返回0~n間不包括n的非負整數(shù)
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
nums := make([]int, 8)
rand.Seed(time.Now().UnixNano())
for j := 0; j < 10; j++ {
for i := 0; i < 8; i++ {
nums[i] = rand.Intn(100)
fmt.Print(nums[i])
fmt.Print("\t")
輸出樣例:
40 63 3 47 76 78 21 44
43 40 12 87 94 90 97 68
0 47 14 71 42 52 20 72
86 57 78 65 53 77 75 70
76 26 63 40 57 75 77 82
86 4 46 25 2 67 46 0
53 64 70 37 59 41 47 63
80 3 85 42 1 47 31 7
2 6 2 40 33 49 30 32
68 90 74 51 40 57 92 97
注: rand.Intn(100) 與 rand.Int()%100 效果相近。
實例
紅球 1-33 選擇6個 不能重復;藍球 1-16 選擇1個;藍球和紅球可以重復
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
red := make([]int, 6)
rand.Seed(time.Now().UnixNano())
for i := 0; i < len(red); i++ {
t := rand.Intn(33) + 1
for j := 0; j < i; j++ {
if t == red[j] {
t = rand.Intn(33) + 1
j--
}
}
red[i] = t
}
fmt.Println("紅球:", red, "\n藍球:", rand.Intn(16)+1)
}
輸出:
紅球: [25 28 19 26 33 14]
藍球: 7
其他隨機函數(shù)
按類型隨機類
func (r *Rand) Int31() int32 func (r *Rand) Int63() int64 func (r *Rand) Uint32() uint32 func (r *Rand) Float32() float32 // 返回一個取值范圍在[0.0, 1.0)的偽隨機float32值 func (r *Rand) Float64() float64 // 返回一個取值范圍在[0.0, 1.0)的偽隨機float64值
指定隨機范圍類
func (r *Rand) Int31n(n int32) int32 func (r *Rand) Int63n(n int64) int64
偽隨機排列的切片
返回一個有n個元素的,[0,n)范圍內(nèi)整數(shù)的偽隨機排列的切片
fmt.Println(rand.Perm(10)) // [3 7 0 1 9 2 4 5 6 8]
生成標準正態(tài)分布
返回一個服從標準正態(tài)分布(標準差=1,期望=0)
取值范圍在[-math.MaxFloat64, +math.MaxFloat64]的float64值。
fmt.Println(rand.NormFloat64()) //生成不同的正態(tài)分布值 fmt.Println(rand.NormFloat64() * 標準差 + 期望)
生成標準指數(shù)分布
返回一個服從標準指數(shù)分布(率參數(shù)=1,率參數(shù)是期望的倒數(shù))
取值范圍在(0, +math.MaxFloat64]的float64值。
fmt.Println(rand.ExpFloat64()) //生成不同的指數(shù)分布值 fmt.Println(rand.ExpFloat64() / 率參數(shù))

到此這篇關于詳解Go語言中rand(隨機數(shù))包的使用的文章就介紹到這了,更多相關Go語言 rand包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang創(chuàng)建構造函數(shù)的方法超詳細講解
構造器一般面向對象語言的典型特性,用于初始化變量。Go語言沒有任何具體構造器,但我們能使用該特性去初始化變量。本文介紹不同類型構造器的差異及其應用場景2023-01-01
Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫的項目實踐
本文主要介紹了Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06

