产生随机数 random
int rand(void); 返回 0 ------- RAND_MAX 之间的一个 int 类型整数,该函数为非线程安全函数。并且生成随机数的性能不是很好,已经不推荐使用。
void srand(unsigned int
seed); 设置种子值,一般与“当前时间|进程ID”作为种子,如果没用调用该函数,则通过rand返回的默认种子值为1
long int random(void); 官方推荐使用的函数为 :返回 0 ------- RAND_MAX 之间的一个 long 类型整数,该函数会产生一个非常大的随机
void
srandom(unsigned int seed); 设置种子值,一般与“当前时间 |进程ID”作为种子,如果没用调用该函数,则通过random返回的默认种子值为1。当你多次调用srandm(x)时,如果x取值相同,则得到的随机数数列是一样的。所以,若我们每次运行程序时,要得到不同的随机数序列,就应该用不同的种子来初始化这个随机数产生器。比如说,用时间初始化它srandom(time(NULL)),或者用getpid(),用进程的pid号初始化,由于每次运行程序时,它的pid号一般是不同的,所以能够产生不同的随机数序列。
使用方法 :
假如你想产生 1 ------10 之间的一个随机数, 你应该像下面这样编码
j = 1 +
(int) (10.0 * (rand() / (RAND_MAX + 1.0)));
而不是下面这样的代码
j = 1 + (rand() % 10);
结论:
如果你使用 srandom 种植种子,则你应该使用 random 返回随机数,如果你使用 srand 种植种子,则你应该使用rand返回随机数。
不过srand和rand官方已经不推荐使用。原因是产生随机数的性能不是很好,另外是随机数的随机性没有random好,再者就是不是线程安全。例如:
(void) srandom( (int) time( (time_t*) 0 ) );
to64( &salt[0], random(), 2 );
最新文章
- 说说React
- 在C语言中嵌入汇编语言
- mysql导入数据库
- Entity Framework 学习整理(分播客整理)
- ASP.NET 发送email
- ELT工具Kettle之CDC(Change Data Capture)实现实例
- loj6271「长乐集训 2017 Day10」生成树求和 加强版
- 一起学Android之Sqlite
- elsticsearch在kibanna中的操作
- redis.Redis与redis.StrictRedis区别
- cowboy源码分析(二)
- linux下open-vswitch安装卸载操作
- python,获取用户输入,并且将输入的内容写到.txt
- Django之setting文件
- MySQL Unable to convert MySQL datetime value to System.DateTime 解决方案
- 保存数据到Excel中
- ECharts 报表事件联动系列四:柱状图,折线图,饼状图实现联动
- Django之视图层介绍
- activiti 用户手册中 10分钟 小例子 简单代码搭建 及 其中的 各种坑
- R语言常用基础知识(入门)
热门文章
- 洛谷 P3345 [ZJOI2015]幻想乡战略游戏 解题报告
- Redis的List链表类型命令
- Linux下C高手成长过程----经典书籍推荐
- python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象
- python基础----__slots__方法、__call__方法
- C++之基础知识20170830
- 【目标检测大集合】R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
- 洛谷P1029 最大公约数和最小公倍数问题
- C++实现人员信息管理系统模拟
- 「HTML5」url、href、src区别