C ++ 11 menyertakan generator Mersenne Twister secara default sebagai bagian dari <random>
antarmuka barunya . Misalnya, untuk menghasilkan bilangan bulat secara seragam antara [-10, 10] menggunakan MT:
std::mt19937 eng; // This is the Mersenne Twister
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;
Sebagian besar ini juga tersedia di setiap kompiler yang menawarkan TR1 meskipun namanya sedikit berbeda; std::tr1::mt19937
dan std::tr1::uniform_int<int>
.
Saya biasanya memperingatkan orang-orang agar tidak menggunakan Mersenne Twister. Ini algoritma yang oke tapi banyak popularitasnya hanya pemasaran. 624 dimensi keacakan lebih dari yang dibutuhkan kebanyakan orang, dan MT membawa persyaratan negara yang relatif berat dan ketika melakukan recalc tabel penuh, ia dapat meniup cache. Saya pribadi menyukai xorshift yang memberikan periode yang sangat baik dan distribusi yang masuk akal untuk apa pun yang dibutuhkan game, dengan memori kecil dan persyaratan CPU.
Saya telah menulis sebuah generator xorshift yang memenuhi standar C ++ 11-compliant - xorshift.hpp , xorshift.cpp - dan meletakkannya di domain publik. Anda dapat menyambungkan ini ke fungsi pengacakan C ++ 11 apa pun, seperti di atas:
xorshift eng;
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;