28

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

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

私はC++を使用しているので、例を提供する場合はC++であるといいでしょう。

ありがとう!

4

2 に答える 2

36

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

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

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

srand(time(NULL));
于 2013-02-16T20:12:35.117 に答える
4

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

あなたとあなたの友人がシードを同じ数に設定した場合、それまでにあなたとあなたの友人は同じ乱数を取得します。したがって、私たち全員がこの単純なプログラムを作成すると:

#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())を使用できます。

于 2016-04-11T12:17:12.773 に答える