更好的随机算法?

jma*_*erx 5 c++ random algorithm seed

我正在用C++制作游戏,它涉及用随机布尔(无论是或否)填充瓷砖,无论是肯定还是否决定rand() % 1.感觉不是很随机.

我使用的是srandctime在启动时,但它似乎是相同的模式都上来了.

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

Boo*_*jum 23

真正的随机性通常似乎不是随机的.期待看到奇怪的运行.

但至少可以做的一件事就是避免使用最低位.在C中引用数字食谱:

如果要生成1到10之间的随机整数,则应始终使用高位来执行此操作,如
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
Run Code Online (Sandbox Code Playgroud)
从来没有任何类似的东西
j = 1 + (rand() % 10);
Run Code Online (Sandbox Code Playgroud)
(使用低位比特).

此外,您可以考虑使用具有更好属性的不同RNG.该Xorshift算法是一个不错的选择.只需几行C就可以快速而紧凑,对于几乎任何游戏来说都应该足够统计.

  • 避免低阶位很大程度上取决于发生器.一些PRNG生成弱*高阶*位. (12认同)

Mar*_*ork 8

低阶位不是非常随机的.
通过使用%2,您只检查随机数的底部位.

假设你不需要加密强度随机性.
那么以下应该没问题.

bool  tile = rand() > (RAND_MAX / 2);
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案与原始解决方案具有相同的问题:仅使用一位rand()的返回值.OP仅使用最低位,您的解决方案仅使用最高位.更好的解决方案是使用所有位. (4认同)