go 隨機數是重複的

簡言

1. go語言的隨機數是最簡單的模型,也就是從既定的數字中篩選符合條件的數字,毫無隨機性可言

2. 想要真隨機的話需要加上隨機種子,這樣其實也不是真正的隨機,還是從既定數字中往後面篩選,只是開始拿數字的起點換了而已

 

實驗如下圖(可以看到無隨機種子時,三次運行結果完全一樣。加了隨機種子後才變得隨機)

 

代碼如下

package main
import (
	"fmt"
	"math/rand"
	"time"
)
// 無隨機種子
func NoSrand() {
	fmt.Println("無隨機種子")
	a := rand.Int31n(100)
	b := rand.Int31n(100)
	c := rand.Int31n(100)
	d := rand.Int31n(100)
	fmt.Printf("a=%v, b=%v, c=%v,d=%v \n", a, b, c, d)
}
// 有隨機種子的
func Srand() {
	fmt.Println("有隨機種子")
	rand.Seed(time.Now().UnixNano())
	a := rand.Int31n(100)
	b := rand.Int31n(100)
	c := rand.Int31n(100)
	d := rand.Int31n(100)
	fmt.Printf("a=%v, b=%v, c=%v,d=%v \n", a, b, c, d)
}
func main() {
	// 無隨機種子的
	NoSrand()
	// 有隨機種子的
	Srand()
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章