3

アプリケーションが .NET Framework 3.5 をターゲットにしている場合、すべての CPU は同じシードに基づいて同じランダム シーケンスを返しますか? 私と同じ結果が得られるかどうかを確認しています。また、アプリケーションを配布するすべての人が同じ結果を得ることを望んでいます。ありがとう!

Random a = new Random(44448);
int i1 = a.Next(65, 90);
MessageBox.Show(i1.ToString());
4

1 に答える 1

6

フレームワークの特定のバージョンでは、シードが固定されているため、プログラムを実行するたびに同じ結果が得られるはずです。

ただし、異なるバージョンの .NET Framework では異なる結果になる可能性があります。

たとえば、.NET 4.0 では77. しかし、コードを(Mono を使用する) ideoneに入れると、67.

この違いの理由は、 で使用される正確なアルゴリズムRandomが仕様の一部ではないためです。ドキュメントには、アルゴリズムに関する次の情報が含まれています。

Random クラスの現在の実装は、Donald E. Knuth の減算乱数ジェネレーター アルゴリズムの修正バージョンに基づいています。詳細については、DE クヌースを参照してください。「コンピューター プログラミングの芸術、第 2 巻: 半数値アルゴリズム」。Addison-Wesley、マサチューセッツ州レディング、第 2 版、1981 年。

...

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

鉱山を強調します。将来の実装で同じアルゴリズムが使用されるという保証はありません。

于 2012-07-23T19:26:14.400 に答える