下面的代码一直打印相同的随机数,我认为rand()无法正常工作。请帮助解释此代码:
Level
答案 0 :(得分:2)
一些问题(除了您应该修复的格式错误的main
原型)。
除非您另有说明,否则rand()
种子的初始值为1.使用srand
进行更改。使用系统时钟时间是惯用的。那么至少你的输出会有所不同。
取模数6将引入统计偏差,除非发电机的周期是6的倍数,这是不太可能的。你将注意到这种小模数的影响。使用基于分部的方法代替RAND_MAX
:rand() / (RAND_MAX / 6 + 1)
不再滥用rand()
而不是rand()
本身就是滥用统一性!
rand()
没有特别好的统计属性。考虑使用Mersenne Twister生成器,它现在是C ++标准库的一部分。对于赌场品质的发电机,您可能不得不求助于使用外部硬件。
无论您采用何种方法,您都可以随时对样本进行卡方检验,以确定其是否具有足够的统计特性。
答案 1 :(得分:1)
您有16%的可能性连续两次获得相同的数字。 rand()
始终为同一种子返回相同的序列。你所看到的不一定是不正确的。如果您删除%
,您会看到哪些回复?你看到相同的数字吗?
尝试在while循环之前调用srand((unsigned) time(&t))
并查看结果。它们应该不同于一次执行到下一次。