博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【随机数】深入理解random和srandom
阅读量:6229 次
发布时间:2019-06-21

本文共 1357 字,大约阅读时间需要 4 分钟。

hot3.png

###运行程序看效果

#include 
using namespace std;/* 测试随机数,种子是随机的,得出的随机数是固定的 */ void testRandom(){ srandom(1); printf("RAND_MAX=%d\n",RAND_MAX); for(int i=0;i<10;i++){ printf("i=%d random value=%ld \n",i+1,random()); } } /* 测试随机数,种子是随机的,得出的随机数是不固定的 */ void testRandom2(){ srandom(time(NULL)); printf("RAND_MAX=%d\n",RAND_MAX); for(int i=0;i<10;i++){ printf("i=%d random value=%ld \n",i+1,random()); } } int main(int argc, char *argv[]) { testRandom(); testRandom2();}

执行程序两次 看效果

###解析 总结

1、生产随机数需要种子(Seed),且如果种子固定,random()每次运行生成的随机数(其实是伪随机数)也是固定的;因为返回的随机数是根据稳定的算法得出的稳定结果序列,并且Seed就是这个算法开始计算的第一个值。2、srandom()可以设定种子,比如srandom(0) 、srandom(1)等等。如果srandom设定了一个固定的种子,那么random得出的随机数就是固定的;     如果程序运行时通过srandom(time(NULL))设定种子为随机的,那么random()每次生成的随机数就是非固定的了。

###运用

//需要使用随机值的时候 一定要记住设置srandom的种子srandom((unsigned int)time(NULL));- (void)viewDidLoad {	[super viewDidLoad];        //使随机值固定	srandom((unsigned int)time(NULL));	self.devices = [@[] mutableCopy];}```###关于随机性```假如你想产生 1 ------10 之间的一个随机数, 你应该像下面这样编码  j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0))); 而不是下面这样的代码   j = 1 + (rand() % 10);结论:如果你使用 srandom 种植种子, 则你应该使用 random 返回随机数,如果你使用 srand 种植种子, 则你应该使用rand返回随机数。不过srand和rand官方已经不推荐使用。原因是产生随机数的性能不是很好,另外是随机数的随机性没有random好,再者就是不是线程安全。```

转载于:https://my.oschina.net/kshopping/blog/706261

你可能感兴趣的文章
JQuery中 数组与字符串(过滤,排序,拆分,合并)
查看>>
pycharm 设置
查看>>
js添加事件
查看>>
模式识别开发之项目---基于人头检测的人流量监测
查看>>
嵌入式开发之优化---代码优化
查看>>
题解 P1665 【正方形计数】
查看>>
python 字典 get方法
查看>>
支付宝9张图稳扫出敬业福
查看>>
GBDT记录
查看>>
同一个菜品商家中心和erp价格显示不一致解决方案FAQ
查看>>
新博客
查看>>
中文前端UI框架Kit(十一)摇头动画?让你的页面元素嗑药嗑起来??
查看>>
2018-2019-2 20162329 《网络对抗技术》Exp7: 网络欺诈防范
查看>>
今日随笔:scrollTop与overflow
查看>>
分分钟用上C#中的委托和事件
查看>>
[示例]NSDictionary-数组中增加字典,并遍历数组
查看>>
开机一会,出现长时间闪屏,并且跳出SendRpt error
查看>>
Journal List
查看>>
selenium-控制浏览器操作
查看>>
leetcode — recover-binary-search-tree
查看>>