rand()
標準とメソッドを使用しない方法で、0から1までのC++で均一な乱数を生成したいと思いますsrand(time(NULL))
。これは、時計の同じ秒内にアプリケーションを複数回実行すると、シードがまったく同じになり、同じ出力が生成されるためです。
ブーストやOS/コンパイラの詳細に依存したくありません。x86を想定できます。
これを行う別の方法は、TR1(私はC ++ 11を持っていません)を使用し/dev/random
、何らかの方法でシードすることであるように思われますか?
今私はこれを持っていますが、それでもtime(NULL)
1秒以内にうまく機能しないシードとして使用します:
#include <iostream>
#include <tr1/random>
int main()
{
std::tr1::mt19937 eng;
eng.seed(time(NULL));
std::tr1::uniform_int<int> unif(1, RAND_MAX);
int u = unif(eng);
std::cout << (float)u/RAND_MAX << std::endl;
}