谁帮忙解释一下这两段代码 rand srand

ForestDB 2003-07-25 01:21:02
unsigned long int next = 1;

/* rand:返回值在0~~32767之间的伪随机数 */
int rand (void)
{
next = next * 1103515245 + 12345; /* ????? */
return (unsigned int) (next / 65535) % 32768; /* ????? */
}

/* srand:为rand ()函数设置种子 */
void srand (unsigned int seed)
{
next = seed;
}

以上代码出于《C程序设计语言》
...全文
273 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
林雨亭 2003-08-03
  • 打赏
  • 举报
回复
to xiaoyi20()
hehe,
> 如果1-10中的每个数出现的次数几乎相同的话
现在的基本随机数生成器 就是这种特征,次数相等,这正是高级随机数生成器竭力避免的
问题。

看看《The Art of Computer Programming》第3章吧,你就会明白的。
xiaoyi20 2003-08-02
  • 打赏
  • 举报
回复
1103515245 12345 65535 32768
这些数字怎么来的?
什么算法?

这些不是多余的。
这是人家算出来的,一个好的随机数多项式,它对于给定的值它的计算结果应该是
均匀出现某个区间内的数。
很简单的说就是
如果你能写过一个式子,y=ax^n+.........;或者是其他形式,对于第一次输入的X,第二次
计算以第一次的结果y当x,以此类推,得到1000个结果(假设结果是1-10),如果1-10中的每
个数出现的次数几乎相同的话,那朋友,你将名传千古。以后的随机函数也许会以你的名字命名。
ForestDB 2003-08-02
  • 打赏
  • 举报
回复
up
ckp 2003-07-25
  • 打赏
  • 举报
回复
这个公式与密码学有关,先将种子乘上一个充分大的数字(乘积要超过32位),然后加上一个小数字,然后取从最高位到第16位的数字,再取余,这样得到的结果,在0至32767上是均匀分布的。结果取决于种子。
fireseed 2003-07-25
  • 打赏
  • 举报
回复
用静态值求随机值。

srand是给出初始值
林雨亭 2003-07-25
  • 打赏
  • 举报
回复
为什么不同,想知道?

在《The Art of Computer Programming》第二卷,第三章 有原理说明。

求随机数的公式
y = ( ax + c ) % m;
a,c和m不是随便挑选的,有严格的要求。
cat5 2003-07-25
  • 打赏
  • 举报
回复
VC6.0 <rand.c>

static long holdrand = 1L;
void __cdecl srand(unsigned int seed)
{
holdrand = (long)seed;
}

int __cdecl rand(void)
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}

可见不同编译器提供的算法中,这两个值是不相同的。
minghui000 2003-07-25
  • 打赏
  • 举报
回复
对。我也搞不懂。

好似是多余的
ForestDB 2003-07-25
  • 打赏
  • 举报
回复
1103515245 12345 65535 32768
这些数字怎么来的?
什么算法?
Andy84920 2003-07-25
  • 打赏
  • 举报
回复
rand 为什么人假随机数。srand才是真的!
int rand (void)
{
next = next * 1103515245 + 12345; /* 给一个初值,不过这个
值我们可以算的到是吧*/
return (unsigned int) (next / 65535) % 32768; /* */
}
/* srand:为rand ()函数设置种子 */
void srand (unsigned int seed)
{
next = seed;
}
seed即为种子。即rand中的初值。一般用time()来作变化的种子值。
这样就使得rand()的每次调用的值 会不一样。因为time()不一样吗。
而不用srand为rand种种子就会每次调用这个函数产生的值都一样的!

70,022

社区成员

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

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