C ++ 11, yeni <random>
arayüzünün bir parçası olarak varsayılan olarak Mersenne Twister jeneratörünü içerir . Örneğin, MT kullanarak [-10, 10] arasında eşit bir şekilde tamsayılar oluşturmak için:
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;
Bunların çoğu, TR1 sunan herhangi bir derleyicide de kullanılabilir, ancak adlar biraz farklıdır; std::tr1::mt19937
ve std::tr1::uniform_int<int>
.
Ben genellikle insanları Mersenne Twister kullanmamaları konusunda uyarıyorum. Bu iyi bir algoritma ama popülerliğinin çoğu sadece pazarlama. Rastgele boyutun 624 boyutu çoğu insanın ihtiyacından daha fazladır ve MT nispeten ağır durum gereksinimlerini taşır ve tam bir tablo yeniden hesaplaması yaptığında önbelleği patlatabilir. Ben şahsen küçük bir bellek ve CPU gereksinimleri ile bir oyunun ihtiyacı olan her şey için mükemmel dönemler ve makul dağılımlar veren xorshift'e kısmi davranıyorum .
Bir (çoğunlukla?) C ++ 11 uyumlu xorshift oluşturucu - xorshift.hpp , xorshift.cpp - yazdım ve kamu malı olarak yerleştirdim. Bunu yukarıdaki gibi herhangi bir C ++ 11 rastgele fonksiyonuna takabilirsiniz:
xorshift eng;
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;