-3

Visual Fox Pro emigrarloをC#に移行する際に作成されたメソッドを使用します。私が抱えている問題は、VisualFoxProのメソッドかどうかを知る方法です。

Rand(intValue)

メソッドはdotNetと同じです:

Random r = new Random (intValue);
r.Next return ();

intValue = 971と仮定すると、dotNETで生成される結果は2027119ですが、FoxProを返すのと同じである必要があります。

主な質問:同じ結果が得られるようにするにはどうすればよいですか?

二次質問:このメソッドが結果Rand()を与えることを証明するオンラインツールfox proを知っていますか?

4

5 に答える 5

5

主な質問: 同じ結果を確実に得るにはどうすればよいですか?

したがって、2 つの異なる乱数ジェネレーターから同じ結果が得られることを保証する必要があります。

intValueあなたの FoxPro の例ではシード値です。一体なぜ、2 つのライブラリが同じ乱数発生器を使用することを保証する必要があるのでしょうか (ヒント: ほとんどの場合そうではありません)。まじめに、乱数を求めている場合、それはどのような違いを生むでしょうか?

既知の一連の数値が必要な場合は、乱数はまったく必要ありません。これは私の心を揺さぶります。乱数ジェネレーターから特定の文字列の値を期待するようにコードが設定されている場合、より大きな問題があります。FoxPro の数値を使用してマップを生成し、そこから数値を取得することもできます。

于 2012-06-05T21:54:17.000 に答える
3

これを実現する唯一の方法は、シード値を取得して生成された乱数を返すメソッドを使用してVisual FoxPro COMオブジェクトを作成し、C#のCOM相互運用機能を介してそれを使用することです。

ネイティブC#でこれを行う方法はありません。だから尋ねるのをやめなさい。

于 2012-06-06T07:30:21.487 に答える
2

あなたが求めることは可能です。Foxpro および .NET フレームワークによって提供されるジェネレーターを使用することはできません。

ほとんどの「乱数」ジェネレーターは、ランダムに「見える」または「感じる」数列を生成するだけです。それらは次のように機能します (非常に単純化されています): 「シード」値から開始し、変換を適用して値を生成し、次にこの値に変換を適用して次を取得します。必要に応じて繰り返します。変換は、値が特定のセグメント (通常は [0,1) 内で均一に分散されることを期待できるようなものです。これについてはさらに詳しく説明できますが、文献はたくさんあります。それを検索します。

さて、明らかに、特定のジェネレーターに同じシードを指定すると、同じシーケンスが何度も得られます。

そのため、必要な結果を得るには、VFP と C# の両方で独自の疑似乱数ジェネレーターを実装する必要があります。ジェネレーターへの連続した呼び出しを行う可能性のある精度の違い、発散などがあることに注意してください。

とにかくアルゴリズムが必要です。ここに移動: D.Knuth 疑似乱数発生器の使用

これがまだ役に立つことを願っています。

于 2012-08-20T14:44:32.040 に答える
2

なぜそれをしたいのかわかりませんが、ここに Visual FoxPro Toolkit for .NET http://foxcentral.net/microsoft/vfptoolkitnet.htmがあり、同じランド ジェネレーター関数を持っている可能性があります。

于 2012-06-05T21:56:26.263 に答える
1

できません。シード値を設定していますが、.NET と FoxPro がまったく同じ方法を使用して乱数を生成する可能性はほぼゼロです。しかし、問題は、なぜこれが欲しいのですか? ランダムはランダムであるはずです。

于 2012-06-05T21:53:30.127 に答える