我想用0和1之間的C++生成統一的隨機數,其方式不使用標準的rand()
和srand(time(NULL))
方法。原因是,如果我在同一秒鐘內多次運行應用程序,種子將完全相同併產生相同的輸出。使用TR1/dev/random在C++中生成隨機數
我不想依賴boost或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;
}
你是否願意使用OS /編譯器特有的功能? – Mysticial 2011-12-28 21:00:24
我想避免這個......我將在各種系統上部署這個 – gnychis 2011-12-28 21:01:10
各種各樣?他們仍然是x86嗎? – Mysticial 2011-12-28 21:01:45