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