實現隨機數

2021-10-24 06:39:06 字數 3433 閱讀 1945

func

seed

(seed int64

)// 該函式設定隨機種子,若不呼叫此函式設定隨機種子,則預設的種子值為1,由於隨機演算法是固定的,如果每次都以1作為隨機種子開始產生隨機數,則結果都是一樣的,因此一般都需要呼叫此函式來設定隨機種子,通常的做法是以當前時間作為隨機種子, 以保證每次隨機種子都不同,從而產生的隨機數也不同

// 該函式協程安全

// 以下函式用來生成相應資料型別的隨機數,帶n的版本則生成[0,n)的隨機數。

// 注意生成的隨機數都是非負數

func

float32()

float32

func

float64()

float64

func

int(

)int

func

int31()

int32

// 注意該函式只返回int32表示範圍內的非負數,位數為31,因此該函式叫做int31

func

int31n

(n int32

)int32

func

int63()

int64

func

int63n

(n int64

)int64

func

intn

(n int

)int

func

uint32()

uint32

func

uint64()

uint64

// 另外,rand包還提供了乙個類,介面和上面的大致相同:

type rand struct

// 建立乙個以seed為種子的源,注意該源不是協程安全的

func

newsource

(seed int64

) source

// 以src為源建立隨機物件

func

new(src source)

*rand

// 設定或重置種子,注意該函式不是協程安全的

func

(r *rand)

seed

(seed int64

)// 下面的函式和全域性版本的函式功能一樣

func

(r *rand)

float32()

float32

func

(r *rand)

float64()

float64

func

(r *rand)

int(

)int

func

(r *rand)

int31()

int32

func

(r *rand)

int31n

(n int32

)int32

func

(r *rand)

int63()

int64

func

(r *rand)

int63n

(n int64

)int64

func

(r *rand)

intn

(n int

)int

func

(r *rand)

uint32()

uint32

func

(r *rand)

uint64()

uint64

// 返回當前時間

func

now(

) time

// 為了將time型別轉換為int64型別以作為隨機種子

// 可以使用如下兩個函式:

// 返回從2023年1月1日到t的秒數

func

(t time)

unix()

int64

// 返回從2023年1月1日到t的納秒數

func

(t time)

unixnano()

int64

// 生成0-8的隨機數

func

main()

// 使用goroutine和channel實現乙個隨機數

package main

import

("fmt"

"math/rand"

"sync"

"time"

)type job struct

type result struct

var jobchan =

make

(chan

*job,10)

var reschan =

make

(chan

*result,10)

var wg sync.waitgroup

// 1.開啟乙個goroutine 迴圈生成隨機數,傳送到 jobchan

func

jobdo

(a chan

<-

*job)

a <- new1

time.

sleep

(time.microsecond*

1000)}

}// 2. 從通道ch1 讀取資料,然後處理後存入 ch2 中

func

resdo

(ch1 <-

chan

*job, ch2 chan

<-

*result)

ch2 <- newres }}

func

main()

for result :=

range reschan

wg.wait()

}

用channel實現隨機數

// 用channel實現隨機數

package main

import

"fmt"

func

main()

} res %=

8 fmt.

println

(res)

}

// 隨機生成5個隨機數

package main

import

("fmt"

"math/rand"

"sync"

"time"

)func

main()

wg.add(2)

gofunc()

close

(out)}(

)gofunc()

}() wg.

wait()

}

隨機數 偽隨機數

隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...

隨機數生成 偽隨機數和真隨機數

c語言隨機數的生成,很隨機,又不隨機,比如像下面的程式 c語言生成隨機數的函式在stdlib.h庫中 include includeint main return 0 上面的 經過執行生成了 41 18467 6334 26500但是無論執行多好遍結果都是一樣的,隨機數並不隨機。這是因為rand 函...

隨機數 科普 真隨機數和偽隨機數

位元幣使用者很喜歡討論 非對稱加密 橢圓曲線 量子計算機 這類高深莫測的話題,然後再以一種非常莫名其妙的方式把幣弄丟,比如說 隨機 隨機很重要,對於位元幣這種密碼學電子貨幣來說,尤其重要。可惜社群內對於隨機的討論並不多,導致很多人缺乏正確的認識,因此,我們今天就和大家聊聊隨機。說到隨機,有兩個必須要...