首頁 >後端開發 >Golang >為什麼在沒有播種的情況下呼叫'rand.Intn”會導致 Go 中的數字序列相同?

為什麼在沒有播種的情況下呼叫'rand.Intn”會導致 Go 中的數字序列相同?

Susan Sarandon
Susan Sarandon原創
2024-10-29 04:57:021091瀏覽

Why Does Calling `rand.Intn` Without Seeding Result in the Same Sequence of Numbers in Go?

Go 中的確定性隨機數產生

在Go 中,呼叫rand.Intn(n int) int 而不為隨機數生成器播種總是會發生回傳相同的數字序列。這是因為用於隨機數產生的預設來源是使用固定種子初始化的,從而有效地使其具有確定性。

為什麼會發生這種情況?

如根據官方文檔,rand.Intn 函數傳回一個偽隨機數,該隨機數是使用確定性演算法和種子值產生的。如果未指定種子,則使用預設種子 1,從而導致每次運行都會產生相同序列的數字。

正確播種隨機數產生

要產生真正的隨機數,為隨機數產生器每次運行使用不同的種子至關重要。這可以透過呼叫 rand.Seed() 函數並向其傳遞隨機種子值來實現。常見的做法是使用目前的 Unix 時間戳記作為種子,這可確保生成器每次執行時都會使用唯一的值進行初始化。

例如:

<code class="go">import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    rand.Seed(time.Now().UnixNano())
    fmt.Println(rand.Intn(10))
}</code>

結論

透過正確播種隨機數產生器,您可以確保您的Go程式產生真正的隨機數,使它們不可預測並更能代表真實的隨機性。

以上是為什麼在沒有播種的情況下呼叫'rand.Intn”會導致 Go 中的數字序列相同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn