我正在学习编程课程,我们正在使用C++。 我们有一个任务,在某些时候,我们需要编写一个函数,以[上限,下限]间隔返回一个随机数。我用下面的:随机数生成问题
lower + (int) (upper * (rand()/(RAND_MAX + 1.0)));
我没有忘记用srand((unsigned int) time(0))
改变srand
。
但是,我每次都得到相同的价值!我请求教授寻求帮助,经过一番调查,他发现rand()
生成的第一个数字不是随机的......高阶位保持不变,并且由于此实现使用它们,所以最终结果不是完全是我所期望的。
是否有一个更优雅,但简单的解决方案,而不是放弃第一个值或使用余数来实现我想要的?
非常感谢您的关注!
〜Francisco
编辑:谢谢大家的意见。我不知道rand()
是这样一个很烂的RNG:P
是不是'rand()'过时了?我认为现在每个人都应该使用'random()'。 – 2010-03-10 19:39:20
'lower + rand()%(upper - lower + 1)'有什么问题?你为什么不想用余数? – IVlad 2010-03-10 19:39:53
只是在说我也注意到了这一点。如果你实际上每次发现它不完全相同时打印出第一个rand(),但这些数字都相当接近。例如,现在当我连续多次开始一个程序时,我都会将数字全部在23000范围内,例如作为第一个数字。之后,数字更随机。我一直只是抛弃了像你提到的第一个rand()数字。 – 2010-03-10 19:42:29