2012-01-01 18 views
0

rnd.NextDouble()のループを通らずにRandomクラスのいくつかの数を予測する方法はありますか?同じSystem.Randomアルゴリズムを使用した線形擬似乱数生成

私は今、このコードを使用しています:

Random rnd = new Random(SOME_STATIC_SEED); 

//I need to get the 1000000'th random number: 
for (ulong i = 0; i < 1000000; i++) 
//I need to avoid this loop and get the result in a linear time! 
{ 
     rnd.NextDouble(); 
} 
double iNeedThisNumber = rnd.NextDouble(); 

を私はループせずにそれを取得できますか?私はSystem.Randomクラスのアルゴリズムを使って与えられた同じ正確な数字が必要です.Netの!


は、伝えられるところで解決:

これは私のコードです!

public static ulong GetNumberFromSequence(int seq) 
{ 
    Random rnd = new Random(seq); 
    return (ulong)(rnd.NextDouble() * 99999999999999)^(ulong)seq; 
} 
+2

あなたは何を求めているのですか?あなたは何を達成しようとしていますか? –

+0

ありがとう!私はSystem.Random .Netクラスを使用して擬似ランダムシーケンスを生成していますが、これをやろうとしたときに、以前のすべての番号をループして、対応する番号をランダムに取得する必要がありました。いくつかの線形複雑アルゴリズムではループを発生させない。 –

+2

このプロパティを持つ乱数ジェネレータが必要な場合は、このプロパティを持つ乱数ジェネレータを使用するだけです。 –

答えて

1

これはあなたのために働くかどうかを確認し

は乱数ジェネレータに必要なインデックスのための種を使用し、最初の生成された番号を選択します。

Random rnd = new Random(required_index_as_seed).Next(); 
double iNeedThisNumber = rnd.NextDouble(); 
+0

投稿する前にこれをテストしましたか? –

+0

Thaaaaaaaaaaaaaaaaaanx、これはうまくいった! –

+0

ん私はそれをテストしていませんでした:( –

0

あなたは指定されたシードの値を事前計算し、リストまたはデータベースでそれらをキャッシュし、または線形時間でインデックス値を生成することができ、代替の擬似乱数生成器を使用することができます。

関連する問題