骰子滚动 - 随机数不能正确生成C ++

时间:2015-12-08 13:57:46

标签: c++ random

下面的代码一直打印相同的随机数,我认为rand()无法正常工作。请帮助解释此代码:

Level

2 个答案:

答案 0 :(得分:2)

一些问题(除了您应该修复的格式错误的main原型)。

  1. 除非您另有说明,否则rand() 种子的初始值为1.使用srand进行更改。使用系统时钟时间是惯用的。那么至少你的输出会有所不同。

  2. 取模数6将引入统计偏差,除非发电机的周期是6的倍数,这是不太可能的。你注意到这种小模数的影响。使用基于分部的方法代替RAND_MAXrand() / (RAND_MAX / 6 + 1)不再滥用rand()而不是rand()本身就是滥用统一性!

  3. rand()没有特别好的统计属性。考虑使用Mersenne Twister生成器,它现在是C ++标准库的一部分。对于赌场品质的发电机,您可能不得不求助于使用外部硬件。

  4. 无论您采用何种方法,您都可以随时对样本进行卡方检验,以确定其是否具有足够的统计特性。

答案 1 :(得分:1)

您有16%的可能性连续两次获得相同的数字。 rand()始终为同一种子返回相同的序列。你所看到的不一定是不正确的。如果您删除%,您会看到哪些回复?你看到相同的数字吗?

尝试在while循环之前调用srand((unsigned) time(&t))并查看结果。它们应该不同于一次执行到下一次。