Go でシードなしで「rand.Intn」を呼び出すと同じ一連の数値が得られるのはなぜですか?

Susan Sarandon
リリース: 2024-10-29 04:57:02
オリジナル
978 人が閲覧しました

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 プログラムが真の乱数を生成し、予測不可能で真の乱数をより表現できるようになります。

以上がGo でシードなしで「rand.Intn」を呼び出すと同じ一連の数値が得られるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!