web-dev-qa-db-ja.com

乱数の生成に関するシードとは何ですか?

乱数の生成に関するシードとは何ですか?

数百から数千の乱数を生成する必要があります。「シード」の使用について多くのことを読みました。シードとは何ですか?乱数が始まるシードですか?たとえば、シードを5に設定した場合、5から制限値までの数値が生成されますか?したがって、たとえば3を与えることはありません。

私はC++を使用しているので、例を提供するなら、それがC++であったらいいでしょう。

ありがとう!

27
SirRupertIII

実際には通常乱数列と呼ばれるものは、値が決定論的アルゴリズムを使用して計算され、確率が実際の役割を果たさないため、「疑似乱数」列です。

「シード」はシーケンスの開始点であり、同じシードから開始する場合は同じシーケンスの番号が取得されることが保証されます。これは、デバッグに非常に役立ちます(プログラムでエラーを探している場合、問題を再現して調査する必要がありますが、非決定的なプログラムは、実行ごとに異なるため、デバッグがはるかに困難になります) 。

数字のランダムなシーケンスだけが必要で、それを再現する必要がない場合は、現在の時刻をシードとして使用します...

srand(time(NULL));
36
6502

だから、このようにしましょう:

あなたとあなたの友人がシードを同じ数に設定すると、それまでにあなたとあなたの友人は同じ乱数を取得します。だから、私たち全員がこの簡単なプログラムを書いたら:

#include<iostream>
using namespace std;
void main () {
    srand(0);
    for (int i=0; i<3; i++){
        int x = Rand()%11;          //range between 0 and 10
        cout<<x<<endl;
    }
}

全員が同じ乱数(5、8、8)を取得します。

毎回異なる数を取得したい場合は、srand(time())を使用できます

4
Anwarvic