1

状態として 6 つの s を使用する素敵なプロパティを持つ疑似乱数ジェネレーター(PRNG) がありますUInt32。私はそれをシードするための合理的な方法を考え出す必要があります。2 つの明白な可能性は次のとおりです。1) 6 つの乱数を生成しSystem.Random、それらをシードとして使用します。2) で 2 つGUIDの を生成しGuid.NewGuid()ます。どちらが良いでしょうか?

暗号化セキュリティは必要ありません。

4

4 に答える 4

4

が必要な場合UInt32は、Randomより便利ですか? Next()Next()Next()など(およびキャスト)...(ただし、同じインスタンスを使用します-毎回Random作成しないでください)。new Random()

これが十分なランダム性を提供するかどうかは、意図が何であるかによって異なります。これはただの種なので、大丈夫なはずです...

于 2008-12-15T20:48:10.183 に答える
4

残念ながら System.Random() にもシード値が必要です。デフォルトでは、予測可能で実際にはランダムではない現在の Tick カウントを使用します。したがって、元の質問に戻る Random のシードが必要になります...

Guid.GetHashCode() をシードとして使用したことはありませんが、私の 2 秒の反応は、それは悪い考えのようには聞こえません。

于 2008-12-15T20:50:11.647 に答える
4

暗号化セキュリティが必要かどうかに関係なく、System.Security.Cryptography.RNGCryptoServiceProvider を使用して乱数を生成してみませんか? 遅すぎるなどの特別な理由がない限り、使用しない理由がわかりません。これは暗号乱数ジェネレーターであるため、はるかに優れた乱数を取得でき、乱数のシードについて心配する必要はありません。

于 2008-12-15T21:24:38.940 に答える
0

シード値としてこれを試してください...

(UInt32)Math.Pow(System.DateTime.Now.TimeOfDay.TotalMilliseconds, 11.0 / 7.0)

現在の時間のミリ秒を11/7乗するだけで、これは任意です。他の分数を試して、それらが自分に適しているかどうかを確認できます。

分数の小数に相当する値が約2.5より大きい場合、オーバーフローが発生し、シード値がゼロになる可能性があることに注意してください。:(

私はこれをしばらく使用しました、そしてそれはかなり良いシード値を与えるようです。

于 2013-02-18T19:21:16.420 に答える