rand()随机函数是什么原理呢?

wangyan8576 2005-12-11 12:28:22
rand()这个函数的算法是什么,小弟想知道。小弟刚刚进入编程的门,才学过一遍谭老头的C语言。
...全文
1110 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
C_1982 2005-12-13
  • 打赏
  • 举报
回复
mark
goolee 2005-12-12
  • 打赏
  • 举报
回复
通常随机数的产生基于线形同余法:

x=mod(j*x+k,m)

其中,
x称为种子,且x位于[0,m-1],当x取不同值是产生不同的随机数列。
m越大随机性越好。
dx30611 2005-12-11
  • 打赏
  • 举报
回复
rand()的初值与上一次rand()的调用有关,
如果是第一次调用,初值是一样的
dx30611 2005-12-11
  • 打赏
  • 举报
回复
rand()有一个最初值,称为种子,然后再根据这个值生成序列,如果种子一样,则随机数一样
srand()设置种子。至于这个种子在rand()中是怎么设置的我也不清楚,请高手解答
jiangkeredgirl 2005-12-11
  • 打赏
  • 举报
回复
随机数,是有几行比较复杂的代码产生的,我看到过
原理是,一个数学上的函数吧,由于出现的各个值,可以基本用概率来测试,所以叫随机数
wangyan8576 2005-12-11
  • 打赏
  • 举报
回复
小弟还不知道各位大虾们说的这些东西,不过我会好好努力钻研的,你们说的东西,我都还不是怎么懂,不过也学到了一些东西,谢啦
xiaocai0001 2005-12-11
  • 打赏
  • 举报
回复
系统里的随机数是利用初等数论中的同余定理来实现的.

比如VC中对于rand()函数是如下实现的.
int __cdecl rand (void)
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}
widowss 2005-12-11
  • 打赏
  • 举报
回复
暈,樓上的都沒講到點子上啊,估計是沒搞過底層匯編。。。。
其實rand()函數的原理就是往中斷里面設置一個變量,當中斷來的時候這個變量就自加一次。溢出之后又從0開始自加。所以我們想取某個范圍的隨機數就必須要rand()%(范圍),為了保証它的隨即性才在里面放置種子。
結分吧!
================================================
按照你这么说就是说随即书都是相连的?事实不是,怎么解释呢?
richard_ma 2005-12-11
  • 打赏
  • 举报
回复
我只知道是用系统时间做种子,其他的我和你知道的差不多
学习ing
xiaocai0001 2005-12-11
  • 打赏
  • 举报
回复
机器内部有一个很长的伪随机数序列,以乱序列出了0~0x7fff的N个连续排列
srand()指定了从这个序列的第几个开始,然后每执行一次rand()就去这个序列的下一个数

-----------------------
这是什么理论哎?
还没听过,说rand()函数的随机数是这样产生的!!
fiftymetre 2005-12-11
  • 打赏
  • 举报
回复
也不是楼上说的原因

机器内部有一个很长的伪随机数序列,以乱序列出了0~0x7fff的N个连续排列
srand()指定了从这个序列的第几个开始,然后每执行一次rand()就去这个序列的下一个数

所以,机器不可能产生真正的随机数的,产生的都是伪随机数
chengzanmiao 2005-12-11
  • 打赏
  • 举报
回复
暈,樓上的都沒講到點子上啊,估計是沒搞過底層匯編。。。。
其實rand()函數的原理就是往中斷里面設置一個變量,當中斷來的時候這個變量就自加一次。溢出之后又從0開始自加。所以我們想取某個范圍的隨機數就必須要rand()%(范圍),為了保証它的隨即性才在里面放置種子。
結分吧!
wangyan8576 2005-12-11
  • 打赏
  • 举报
回复
是不是先给定一个初始值,然后编一个方程产生随机的数?就像是数列一样,如果是?那位有这个rand()的原代码,贴个看看
oyljerry 2005-12-11
  • 打赏
  • 举报
回复
根据一个种子开产生序列

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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