UNIXからWindowsにコードを移植しようとしていますが、POSIXの実装とsrandom(x)
、random()
特定のシードに対して、x
POSIX.1-2001に準拠するものと同じ数列を生成する関数が必要です。Windowsで利用可能なオプションにはどのようなものがありますか?
3 に答える
srandom
と家族はglibcのメンバーです。ライセンスと互換性がある限り、srandom/randomのソースコードをglibcからアプリケーションにコピーできます。別の実装を探しているなら、どんな小さな金額でも
POSIXは実際にはインターフェースの適合性であり、実装の適合性ではないことに注意してください。POSIXは、それを生成するためのメカニズムや、結果の数値がどうあるべきかを実際には示していません。
複数のプラットフォーム間で同じ数列を保証する場合は、乱数ジェネレーターの標準ライブラリ実装に依存しないでください。独自に作成するか、既知の実装をリサイクルする必要があります。
JWWalkerのコメントで述べたように、かなり優れたブーストランダム実装
C++
があります。これは、乱数のクラスの優れたセットを提供しますが、それは異なる言語ではC++
ないC
ため、おそらく直接適切ではありません。
Windowsでrand_s とsrand関数を確認できます。しかし、それらがPOSIX標準に準拠しているかどうかはわかりません。
編集
より良いものはCryptGenRandomのようです。詳細については、このリンクを確認してください。
単純な疑似ランダムジェネレーターを探している場合は、線形合同ジェネレーター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;
}