複数の機能を持つプロジェクトに取り組んでいます。疑似乱数を数回、それぞれ異なる関数で呼び出してから、計算を行います。例えば:
f(i,j)*random(i,j)
さまざまな関数で、擬似乱数は、特定の i および j での別の関数の擬似乱数と等しくないと仮定します。それは正しい仮定ですか?もしそうなら、どうすればそれを変えることができますか?
私が使用している言語は、VB6 に似た Xojo です。
複数の機能を持つプロジェクトに取り組んでいます。疑似乱数を数回、それぞれ異なる関数で呼び出してから、計算を行います。例えば:
f(i,j)*random(i,j)
さまざまな関数で、擬似乱数は、特定の i および j での別の関数の擬似乱数と等しくないと仮定します。それは正しい仮定ですか?もしそうなら、どうすればそれを変えることができますか?
私が使用している言語は、VB6 に似た Xojo です。
質問が何であるかはよくわかりませんが、疑似乱数ジェネレーター (PRNG) の基本をいくつか説明することで答えが得られることを願っています。
これはどちらかというと言語の機能ですが、通常、同じ関数 (つまりrandom
) の呼び出しは、どこから呼び出したかには関係ありません (他の決定要因がある場合もあります)。
random(i,j)
連続して 2 回、またはしばらくしてから、同じ数値が返される場合と返されない場合があります。それは (疑似) ランダムです。そうなるかどうかはわかりません。
常にrandom(i,j)
同じ値を返したい場合は、何らかの式を使用して の値と別の値をマッピングする独自の関数を作成することを検討するか、以前に生成されたすべての数値を に格納し、存在する場合は単にこの値を返すことができます。i
j
map
random(i,j)
同じ値を決して返したくない場合は、 からi
までの数値を生成してそれらj
をシャッフルし、単純にリスト内の次の値を繰り返し返すことを検討してください。
通常、PRNGのシードを設定できます。これにより、シードをある値に設定した後にシーケンスを取得すると、別のときにシードを同じ値に設定すると同じシーケンスが取得されます。これは、以前の結果を正確に再現する機能を提供する以外に、(私が考えることができる) 実用的な目的にはあまり役立ちません。