C# のRandom
クラスのインスタンスのシードが必要ですが、ほとんどの人が現在の時間のティック カウンターを使用していると読みました。ただし、これは 64 ビット値であり、シードは 32 ビット値である必要があります。GetHashCode()
を返すメソッドは、int
そのオブジェクトに適切に分散された値を提供する必要があり、これを使用して、ティック カウントの下位 32 ビットのみを使用することを避けることができると考えました。Int64
ただし、データ型の GetHashCode() については何も見つかりませんでした。
だから、それはあまり重要ではないことはわかっていますが、次のことは私が思うほどうまくいくでしょうか(ランダム性を試行錯誤することはできません)、それとも(int)DateTime.Now.Ticks
シードとして使用するのと同じように機能するのでしょうか? それとも、それはさらに悪いことですか?誰がこれに光を当てることができますか。
int seed = unchecked(DateTime.Now.Ticks.GetHashCode());
Random r = new Random(seed);
編集:なぜシードが必要なのに、Random()
コンストラクターに仕事をさせないのですか? 同じランダム シーケンスに同じシードを使用する他のクライアントにシードを送信する必要があります。