rand()
0 または 1 ( ) を生成するために使用していますrand() % 2
。現在の時刻 ( ) を使用してシードしていsrand(time(NULL))
ます。
rand()
多くのデバッグを行った後、 16 回以上連続して偶数 (奇数) を返さないことに気付きました。
これは既知の問題ですか? Cに付属するより良いPRNGはありますか?
Visual Studio 2010 を使用して Windows 7 で実行しています。
を使用する代わりに、 をrand()%2
試してくださいrand()>(RAND_MAX/2)
。rand()
間隔 で一様であると仮定することしかできません[0, RAND_MAX]
。
編集:これは、コメントで Shahbaz によって提案されたもので、この回答を投稿した後に初めて気づきました。
編集: ArjunShankar は、私の以前の言い回しについて私に電話をかけました:
C99 標準から:
rand 関数は、0 から RAND_MAX までの範囲の一連の疑似乱数整数を計算します。
技術的には、均一性 (またはequidistributed ) は指定されていませんが、一般的に使用される PRNG (Mersenne Twister など) の実装に使用される事実上の標準です。これは、プログラマーが不均一な分布を持つカスタム PRNG を簡単に作成できるようにするためです。このプロパティがないと、プログラマはカスタム PRNG を最初から実装する必要があります。
rand()
吸うことで有名です。 random()
(時々)少し良いですがdrand48()
、その家族ははるかに優れています.
それ以上のものが必要な場合は、mersene twister または他の PRNG ライブラリを調べてください。または、必要に応じて十分なデータを提供できる場合は、 /dev/random を確認してください。