关于rand函数的实现原理。

c_word 2002-06-15 10:12:01
c语言中的rand函数的实现原理是什么?我用它编出的程序好象有点规律。到底是怎么回事?
...全文
970 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobird1 2002-06-17
  • 打赏
  • 举报
回复
用rand();之前,
加一句randomize();后,你在找规律看看
Laudon 2002-06-17
  • 打赏
  • 举报
回复
不是
c_word 2002-06-16
  • 打赏
  • 举报
回复
srand函数的作用就是seed=y+t的?
Laudon 2002-06-16
  • 打赏
  • 举报
回复
产生整数rand的原理是:
y=ax+b(mod n)其中,n一般是一个很大的素数,几万。
a也是大素数。而且a,b,n都是常数。所以rand的产生决定于x,
他被称为seed。
每一个seed都是上一次产生的y的函数。这样,如果直接取seed=y的话,
虽然产生的rand之间相关性甚小,但只要知道某个y,就能推知以后的rand。
为避免这种情况,一般取seed为y和当时计算机的时间的函数,如seed=y+t
c_word 2002-06-15
  • 打赏
  • 举报
回复
srand函数的形参是函数的初始值?
晨星 2002-06-15
  • 打赏
  • 举报
回复
关于“随机数”的产生有许多算法,但无论如何,都不可能产生真正的随机数,因为电脑程序是个确定状态转换机,一种输入必定产生一种确定的输出。
但要实现“不可预知”还是可以做到的,只需有“不可预知”的输入或者初始化就可以了,像系统时间,网络实时带宽,Cpu使用率等等都可以作为“不可预知”的量来初始化随机函数。
晨星 2002-06-15
  • 打赏
  • 举报
回复
你需要在使用前初始化随机种子:
srand(time(NULL));
当然,这样还是伪随机的,但至少就不会被你轻易看出有规律了。
ray_gao 2002-06-15
  • 打赏
  • 举报
回复
当然了,如果用rand,多次循环后结果是一样的,应该设定一个随机种子,然后用rand~!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧