3

UNIXからWindowsにコードを移植しようとしていますが、POSIXの実装とsrandom(x)random()特定のシードに対して、xPOSIX.1-2001に準拠するものと同じ数列を生成する関数が必要です。Windowsで利用可能なオプションにはどのようなものがありますか?

4

3 に答える 3

5

srandomと家族はglibcのメンバーです。ライセンスと互換性がある限り、srandom/randomのソースコードをglibcからアプリケーションにコピーできます。別の実装を探しているなら、どんな小さな金額でも

POSIXは実際にはインターフェースの適合性であり、実装の適合性ではないことに注意してください。POSIXは、それを生成するためのメカニズムや、結果の数値がどうあるべきかを実際には示していません。

複数のプラットフォーム間で同じ数列を保証する場合は、乱数ジェネレーターの標準ライブラリ実装に依存しないでください。独自に作成するか、既知の実装をリサイクルする必要があります。

JWWalkerのコメントで述べたように、かなり優れたブーストランダム実装C++があります。これは、乱数のクラスの優れたセットを提供しますが、それは異なる言語ではC++ないCため、おそらく直接適切ではありません。

于 2013-03-02T10:41:36.903 に答える
1

Windowsでrand_ssrand関数を確認できます。しかし、それらがPOSIX標準に準拠しているかどうかはわかりません。

編集

より良いものはCryptGenRandomのようです。詳細については、このリンクを確認してください。

于 2013-03-02T10:16:12.670 に答える
1

単純な疑似ランダムジェネレーターを探している場合は、線形合同ジェネレーターhttp://en.wikipedia.org/wiki/Linear_congruential_generatorを使用できます。

例えば。最初の例:

unsigned int seed = 2;

unsigned int rand()
{
   seed = 1664525 * seed + 1013904223;
   return seed;
}

void srand(unsigned int new_seed)
{
   seed = new_seed;
}
于 2013-03-02T10:39:36.840 に答える