ホームページ  >  記事  >  バックエンド開発  >  Go で乱数が繰り返されるのはなぜですか?それを修正するにはどうすればよいですか?

Go で乱数が繰り返されるのはなぜですか?それを修正するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-25 09:14:02900ブラウズ

Why Do Random Numbers Repeat in Go and How Can We Fix it?

Go での乱数の繰り返しへの対処

Go では、特に rand.Intn( を使用する場合) に乱数を生成すると、予期しない繰り返しが発生することがあります。 n int) ランダムな整数を生成するための int。これは、rand.Intn などのトップレベルの乱数関数で使用されるデフォルトのソースが、プログラムが連続して実行されるときに決定的な値のシーケンスを生成するという事実に起因します。

この問題を解決するには、解決策は、 rand.Seed() 関数を使用して乱数ジェネレーターをシードすることです。シード処理により、初期化パラメーターとして機能するランダムな値がジェネレーターに提供されます。一般的な方法は、現在の Unix タイムスタンプをシードとして使用することです:

<code class="go">rand.Seed(time.Now().UnixNano())</code>

たとえば、

<code class="go">package main

import (
    "fmt"
    "math/rand"
)


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

の代わりに、常に同じ乱数を返し、ジェネレータをシードします。実行ごとに異なる乱数が保証されます:

<code class="go">package main

import (
    "fmt"
    "math/rand"
    "time"
)


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

rand.Seed() を呼び出さなければ、ジェネレーターは値 1 がシードされているかのように動作し、乱数が繰り返されることに注意してください。

以上がGo で乱数が繰り返されるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。