1

awkマニュアルにはsrand、「シード(開始点)を設定する」と記載されていrand()ます。私srand(5)は次のコードで使用しました:

awk 'BEGIN {srand(5);while(1)print rand()}'> /var/tmp/rnd

次のような数値を生成します。

0.177399
0.340855
0.0256178
0.838417
0.0195347
0.29598

srand(5)上記の出力で「開始点」を生成する方法を説明できますか?

4

2 に答える 2

1

PRNG (疑似乱数ジェネレーター) は、繰り返し周期が非常に長く、連続する値がはるかに使用する限り、明らかな統計的相関関係がほとんどない一連の値を進めることができる、ある種の内部状態を維持することによってランダムな値を生成します。それらの数は少なくなります。それにもかかわらず、その値は決定論的なシーケンスです。

PRNGの「シード」は、基本的に、決定論的シーケンスのどのポイントから開始するかを選択することです。アルゴリズムは、シードとして渡された数値を取得し、(アルゴリズム固有の方法で) シーケンスのどこから開始するかを計算します。シードの実際の値は関係ありません。アルゴリズムはシードに依存するべきではありません。

ただし、シード値自体は PRNG アルゴリズムに直接関与しませんが、シーケンスの開始点を一意に識別します。そのため、特定のシードを指定してから一連の値を生成すると、同じ値で再度シードすると、 PRNG を使用して、同じ一連の値を生成します。

于 2013-06-19T21:09:27.950 に答える
1

開始点はシードと呼ばれます。これは rand 関数の最初の繰り返しに与えられます。その後、 rand は、古い数値を計算するときに取得した以前の値を使用して、次の数値を生成します。シードに素数を使用することをお勧めします。

于 2013-06-19T20:21:58.417 に答える