什么是用于C++游戏的优秀随机数生成器?
我的考虑是:
rand()
在很多地方使用,所以任何其他发电机最好能够证明它需要的所有变化.我对这个问题知之甚少,所以我能想到的唯一选择是Mersenne Twister ; 它满足所有这些要求吗?还有什么比这更好的吗?
编辑: Mersenne Twister似乎是共识的选择.但是第4点呢?它真的好多了rand()
吗?
编辑2:让我对第2点更清楚一点:通过了解随机数,玩家无法作弊.期.我希望它足够随意,人们(至少那些了解随机性的人)不能抱怨它,但我并不担心预测.这就是为什么我把速度作为首要考虑因素.
编辑3:我现在倾向于Marsaglia RNG,但我仍然想要更多的输入.因此,我正在设立一个赏金.
编辑4:只是一个注释:我打算在今天午夜UTC之前接受一个答案(以避免弄乱别人的代表帽).所以如果你想回答,不要等到最后一分钟!
此外,我喜欢Marsaglia的XORshift发电机的外观.有没有人对它们有任何意见?
我想知道是否有办法利用英特尔沙桥CPU中的新硬件真数发生器?我读到英特尔的MKL(数学内核库)公开了这个功能,但这需要MKL套件和英特尔编译器,结果相当昂贵.
有没有其他方法在我的C++代码中使用硬件随机数生成器?例如,一个不错的,仅标题库?
我需要std::vector<unsigned int>
用随机值填充一个巨大的(7734500元素),我试图与多个线程并行地实现它以实现更高的效率.这是我到目前为止的代码:
std::random_device rd; // seed generator
std::mt19937_64 generator{rd()}; // generator initialized with seed from rd
static const unsigned int NUM_THREADS = 4;
std::uniform_int_distribution<> initialize(unsigned long long int modulus)
{
std::uniform_int_distribution<> unifDist{0, (int)(modulus-1)};
return unifDist;
}
void unifRandVectorThreadRoutine
(std::vector<unsigned int>& vector, unsigned int start,
unsigned int end, std::uniform_int_distribution<>& dist)
{
for(unsigned int i = start ; i < end ; ++i)
{
vector[i] = dist(generator);
}
}
std::vector<unsigned int> uniformRandomVector
(unsigned int rows, unsigned int columns, unsigned long …
Run Code Online (Sandbox Code Playgroud)