CでN組の乱数を生成する簡単なプログラムがあります.
私はrand()
これに使用しています。N の値は、コマンド ライン パラメータです。
渡されたコマンドライン引数が同じ場合、常に同じ数字のストリームが生成されることに気付きました。
マンページによると、rand()
明示的なシードがない場合、RNG は値 1 によって暗黙的にシードされます (srand()
私のプログラムには呼び出しがありません)。
しかし、arg=10 でプログラムを呼び出し、次に arg=12 でプログラムを呼び出すと、両方のシーケンスの最初の 10 桁が等しいと見なされるはずですよね? (どちらも同じシード、つまり 1 を使用します)。これは起こっていません。暗黙的に渡された引数からシードが派生および適用されているように見えますが、そうではないようです。何か案は?
更新: [これを以前に投稿して申し訳ありません]
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int objs=100, i;
if (argc >= 2)
objs = atoi(argv[1]);
for(i=0; i<objs; i++){
int p = rand() % objs;
int q = rand() % objs;
printf("%d %d\n", p, q);
}
return 0;
}
Ubuntu 12 と gcc 4.7.2 を使用しています。