2

.Net(4.5) で Random クラスを使用していて、常に同じシードを使用して 1000 の数値を生成している場合、別のマシン (diff チップセット/コア数など) で 1000 の数値が生成される可能性があります。異なる?どうしてそうなるのかはわかりませんが、同僚の一人から、そうなる可能性があることに注意する必要があると言われました。私が行ったテストは常に一貫しているようです。さまざまな数値を取得できるシナリオがあるのではないかと心配していました。世代をパラライズしようとしているのであれば、それは違うと理解できました。

int seed = 99;
var random = new Random(seed);

for (int i = 0; i < 1000; i++)
   random.Next();
4

2 に答える 2

8

異なる PC 間で同じフレームワークを実行することはありそうにないように思われます (つまり、同じシーケンスを合理的に期待できます) - しかし、MS は実装を変更する権利を留保します。MSDN の状態:

Random クラスの乱数ジェネレーターの実装は、.NET Framework のメジャー バージョン間で同じであるとは限りません。そのため、アプリケーション コードでは、異なるバージョンの .NET Framework で同じシードが同じ疑似乱数シーケンスになると想定しないでください。

したがって、より強力な保証が必要な場合は、独自の PRNG 実装を使用してください。そのようなものがたくさんあります。

于 2013-10-24T16:32:00.577 に答える
3

このリンクによると、.Net 4.5のすべてのケースで同じシーケンスが得られ ます.Net フレームワークの異なるバージョンに適用されるかどうかはわかりません (前の回答に同意)。

MSDN

「異なる Random オブジェクトに同一のシード値を提供すると、各インスタンスが同一の乱数シーケンスを生成します。」

于 2013-10-24T16:32:49.370 に答える