c++ - 更好的随机算法?

标签 c++ algorithm random seed

我正在用 C++ 制作一个游戏,它涉及用随机 bool 值(是或否)填充方 block ,是否是由 rand() % 1 决定。感觉不是很随意。

我在启动时将 srandctime 一起使用,但似乎出现了相同的模式。

是否有任何算法可以创建非常随机的数字?或者关于如何改进 rand() 的任何建议?

最佳答案

真正的随机性通常看起来并不是很随机。不要期望看到奇怪的运行。

但至少您可以立即做的一件事是避免只使用最低位。在 C 中引用数字食谱:

If you want to generate a random integer between 1 and 10, you should always do it by using high-order bits, as in
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
and never by anything resembling
j = 1 + (rand() % 10);
(which uses lower-order bits).

此外,您可以考虑使用具有更好属性的不同 RNG。 Xorshift算法是一个不错的选择。它仅需几行 C 代码即可快速且紧凑,并且在统计上应该足以满足几乎所有游戏的需求。

关于c++ - 更好的随机算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1912199/

相关文章:

c++ - MFC 应用程序在 AfxCheckDialogTemplate 上崩溃

c++ - 模板类的组织

c++ - 在逻辑电路模拟器中检测环路

algorithm - 寻路算法难度

c - 我怎样才能把不同的数字放在 C 上的 2 个数组中

c++ - 如何在 Cmake 中定义传递 CXX_STANDARD C++11

algorithm - 算法导论第三版-习题2.3 -3-nlg(n)的归纳证明

algorithm - 在 O(logn) 中查找合并数组中的中间元素

java - 生成大量随机数的有效方法

python - 使用 float 为 Python RNG 播种是否安全?