| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1658 人关注过本帖
标题:随机数播种问题
只看楼主 加入收藏
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
收藏
得分:3 
回复 楼主 smile_line
先生,随机数播种是什么意思?

潇洒不可少!
2013-05-26 17:04
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
以下是引用apull在2013-5-23 01:53:23的发言:

rand随机数是通过一个特别的函数计算出来的,种子一样,结果也一样。。
你把srand放到函数里,每次调用都要初始化一遍,由于运行的太快,(unsigned)time(NULL)得到的结果也是一样的,这个你可以输出检验下,把循环的20改成20000就能看到变化了。
所以每次调用random,就用同样的种子初始化srand,那么的出来的结果也是一样的。
一般在主函数里初始化一次就ok了



我想问,为什么放到主函数,这个问题就没有了呢?
2013-05-26 18:36
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:0 
回复 楼主 smile_line
你的代码相当于
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void main()
{
    int i;
    for(i=1;i<20;i++)
    {
        srand((unsigned)time(NULL));
        printf("%d\n", rand()%(10-2+1)+2);
    }
}

每次循环都要初始化一次种子,得出的结果是一样的。。

改成下面只初始化一次种子就可以
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void main()
{
    int i;
    srand((unsigned)time(NULL));
    for(i=1;i<20;i++)
    {
        printf("%d\n", rand()%(10-2+1)+2);
    }
}
收到的鲜花
  • smile_line2013-05-27 16:19 送鲜花  3朵  
2013-05-26 21:36
w716169470
Rank: 2
等 级:论坛游民
帖 子:51
专家分:25
注 册:2013-4-18
收藏
得分:0 
在使用srand的时候,直接设置随机种子。只设置一次就可以,不需要每次生成随机数之间都进行种子的设置。像你代码中所写。每次调用函数都进行了种子设置。那么计算机CPU的运行速度比较快。相当于你在一秒内一共设置了N次的随机种子,并且获取到得系统时间值是相同的。所以你产生的随机数也就形同,这是因为种子相同的原因造成的。如果你在调用你的自定义函数random之前加一个延时函数,也可以解决这个问题。不过这就是所谓的脱裤子放屁了。
如果在主函数里设置随机种子,只获取到当前的系统时间,作为第一次的种子,每次的种子都会发生变化,但是如果你在自定义函数里,循环20次,完全可以在一秒钟之内完成,那么,系统的时间就相当于没有更新,那么种子也就没有发生改变,计算机当中的随机数本身就是伪随机,需要种子的变化才能发生改变,所以。。。。你的问题你自己应该了解了吧。
本人是来接分的。自己看着办吧!~。。。。
收到的鲜花
  • smile_line2013-05-27 16:17 送鲜花  5朵   附言:我很赞同
2013-05-27 09:28
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
感谢各位大神啊!!!!小的学识太浅。。。已再加分
2013-05-27 16:18
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 11楼 浮云之冰雪
就是用srand产生一个种子。。。。函数的备注写错了。。。。
2013-05-27 16:19
快速回复:随机数播种问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018360 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved