詳解Go語(yǔ)言中rand(隨機(jī)數(shù))包的使用
包"math/rand"
隨機(jī)數(shù)生成器,可以生成 整型或浮點(diǎn)型 的偽隨機(jī)數(shù)。
隨機(jī)數(shù)種子
不同的種子生成不同的隨機(jī)數(shù),無種子編譯后運(yùn)行的結(jié)果是定值。
通常以時(shí)鐘作為參數(shù)初始化,rand.Seed(time.Now().UnixNano())。
隨機(jī)函數(shù)
rand.Int()
返回一個(gè)隨機(jī)整數(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的非負(fù)整數(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 效果相近。
實(shí)例
紅球 1-33 選擇6個(gè) 不能重復(fù);藍(lán)球 1-16 選擇1個(gè);藍(lán)球和紅球可以重復(fù)
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藍(lán)球:", rand.Intn(16)+1) }
輸出:
紅球: [25 28 19 26 33 14]
藍(lán)球: 7
其他隨機(jī)函數(shù)
按類型隨機(jī)類
func (r *Rand) Int31() int32 func (r *Rand) Int63() int64 func (r *Rand) Uint32() uint32 func (r *Rand) Float32() float32 // 返回一個(gè)取值范圍在[0.0, 1.0)的偽隨機(jī)float32值 func (r *Rand) Float64() float64 // 返回一個(gè)取值范圍在[0.0, 1.0)的偽隨機(jī)float64值
指定隨機(jī)范圍類
func (r *Rand) Int31n(n int32) int32 func (r *Rand) Int63n(n int64) int64
偽隨機(jī)排列的切片
返回一個(gè)有n個(gè)元素的,[0,n)范圍內(nèi)整數(shù)的偽隨機(jī)排列的切片
fmt.Println(rand.Perm(10)) // [3 7 0 1 9 2 4 5 6 8]
生成標(biāo)準(zhǔn)正態(tài)分布
返回一個(gè)服從標(biāo)準(zhǔn)正態(tài)分布(標(biāo)準(zhǔn)差=1,期望=0)
取值范圍在[-math.MaxFloat64, +math.MaxFloat64]的float64值。
fmt.Println(rand.NormFloat64()) //生成不同的正態(tài)分布值 fmt.Println(rand.NormFloat64() * 標(biāo)準(zhǔn)差 + 期望)
生成標(biāo)準(zhǔn)指數(shù)分布
返回一個(gè)服從標(biāo)準(zhǔn)指數(shù)分布(率參數(shù)=1,率參數(shù)是期望的倒數(shù))
取值范圍在(0, +math.MaxFloat64]的float64值。
fmt.Println(rand.ExpFloat64()) //生成不同的指數(shù)分布值 fmt.Println(rand.ExpFloat64() / 率參數(shù))
到此這篇關(guān)于詳解Go語(yǔ)言中rand(隨機(jī)數(shù))包的使用的文章就介紹到這了,更多相關(guān)Go語(yǔ)言 rand包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux環(huán)境下編譯并運(yùn)行g(shù)o項(xiàng)目的全過程
Go語(yǔ)言是Google的開源編程語(yǔ)言,廣泛應(yīng)用于云計(jì)算、分布式系統(tǒng)開發(fā)等領(lǐng)域,在Linux上也有大量的應(yīng)用場(chǎng)景,這篇文章主要給大家介紹了關(guān)于Linux環(huán)境下編譯并運(yùn)行g(shù)o項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2023-11-11Golang實(shí)現(xiàn)KV存儲(chǔ)引擎實(shí)例探究
這篇文章主要為大家介紹了Golang實(shí)現(xiàn)KV存儲(chǔ)引擎實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Golang創(chuàng)建構(gòu)造函數(shù)的方法超詳細(xì)講解
構(gòu)造器一般面向?qū)ο笳Z(yǔ)言的典型特性,用于初始化變量。Go語(yǔ)言沒有任何具體構(gòu)造器,但我們能使用該特性去初始化變量。本文介紹不同類型構(gòu)造器的差異及其應(yīng)用場(chǎng)景2023-01-01Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫(kù)的項(xiàng)目實(shí)踐
本文主要介紹了Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫(kù)的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06