rand随机函数
1、rand()
rand()函数是使用线性同余法做的,它并不是真的随机数,因为其周期特别长,所以在一定范围内可以看成随机的。
rand()函数不需要参数,它将会返回0到RAND_MAX之间的任意的整数。[0, RAND_MAX],(0 and RAND_MAX included)。
如果我们想要生成一个在区间[0, 1]之内的数,那么我们可以写出如下代码:
rand_num = rand()/RAND_MAX;
c++中rand()函数生成的范围:0~RAND_MAX RAND_MAX是C中stdlib.h中宏定义的一个字符常量 centos7下面(GNU C++也是),他定义的是 /* The largest number rand will return (same as INT_MAX). */ #define RAND_MAX 2147483647 在vs2012下面(32767),他是: #define RAND_MAX 0x7fff |
rand函数产生一个0到RAND_MAX的伪随机数,这里的RAND_MAX因不同的实现而异,但RAND_MAX至少为32767。
有些时候,用户需要获取一定更小范围中的一随机数,如得到一组100以内的随机数,就可以采用rand()%100这种方法,使得结果在100以内。
%是模运算,表示整除 右操作数 取余数
如果想得到【1,100】之间的随机数,则需要对上面的加法进行加工,写成:
(rand()%100)+1; //先得到0-99的随机数,然后加1,可得1-100区间内的数
可见,由要生成的随机范围N,进行缩放rand()%N和偏移+a。
2、srand()
srand(time(0));
仅rand();生成的是伪随机数,多次运行结果不变。
srand()为初始化随机数发生器,用于设置rand()产生随机数时的种子。传入的参数seed为unsigned int类型,通常我们会使用time(0)或time(NULL)的返回值作为seed。
不调用srand(),将默认为srand(1)。
引入变化的种子:使用time(NULL)或time(0)来表示变化的种子,time(0)的返回的是从1970 UTC Jan 1 00:00到当前时刻的秒数,为unsigned int类型。
time函数原型在<ctime>头文件中。
在不同时刻运行程序时,就会有不同的随机数种子,因此就可以得到不同的结果。引入sleep(1.0)。
3、使用
#include<cstdlib>
cstdlib(即:stdlib.h)中常用到的函数: #define EXIT_SUCCESS 0 return EXIT_SUCCESS; |
using std::rand;
using std::srand;
srand(seed);//seed每次要变
num=(1+rand()%6);//1-6随机数
【转载自】
关于rand()和srand() - 微念的博客 - CSDN博客 https://blog.csdn.net/u013745804/article/details/82379266
std::rand - cppreference.com https://en.cppreference.com/w/cpp/numeric/random/rand
最新文章
- CentOS 6.3下Samba服务器的安装与配置方法(图文详解)
- Linux压缩与解压常用命令
- OpenCV: imshow后不加waitkey无法显示视频
- BZOJ 1053 &; 反素数
- C# 实现 单例模式
- .NET判断某一年的所有放假的日期
- show variables 详解
- Java集合中的Map接口
- vim 去除代码行号并正常缩进代码
- Access denied when I try to install profiler
- 基于TensorFlow的深度学习系列教程 1——Hello World!
- 24.QTableView函数使用,右击菜单实现
- 配置Google Gmail分类和过滤器
- 解决资源id冲突
- Python3基础 函数 可变参数,将传进来的参数转成列表
- Gitlab不小心关闭了sign-in,无法登录web的坑。。。
- memcached centos启动笔记
- BZOJ 2743: [HEOI2012]采花 离线树状数组
- chrome 55 zepto tap事件出错?
- mysql 彻底解决:Incorrect string value: &#39;\xF0\x9F\x98\xAD";,...&#39; for column &#39;commentContent&#39; at row 1
热门文章
- Django:CSRF(Cross-request forgery)跨站请求伪造
- 20.Vue中获取DOM元素和组件
- HDU-5728-PowMod-求phi(i*n)前缀和+指数循环节
- Ajax的简单例子——PHP
- DYNAMIC LINK LIBRARY - DLL
- jquery 使用off移除事件 使用one绑定一次事件,on绑定事件后触发多次相同的事件的异常
- 树状数组例题-数星星,简单题easy,校门外的树2,清点人数
- 使用VS创建三层架构的项目
- 洛谷 UVA10298 Power Strings 题解
- BZOJ 2839: 集合计数 广义容斥