C++中 Rand随机序列函数
标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。(一般情况下:我们都使用time(NULL)种子, 从一个时间点(一般是1970年1月1日0时0分0秒)到那时的秒数(即日历时间))
#define RAND_MAX 0x7fffu
这个是bcc55中的定义,说明这个整数的最大数是0x7fffu,u代表unicode编码。
PS: time(NULL)返回值是time_t,实际上是长整型,到未来的某一天。对于time_t数据类型的值来说,它所表示的时间不能晚于2038年1月18日19时14分07秒。不过基本上也够大家使用了,如果需要更长的时间,可以使用64的_time64来进行处理。
rand()在每次被调用的时候,它会查看:
1)如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。
2)如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
根据上面的第一点我们可以得出:
1)如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2)否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。
3)如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。
产生随机数的用法
1) 给srand()提供一个种子,它是一个unsigned int类型;
2) 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);
3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
一定范围随机数的通用表示公式
- 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
- 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
- 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
- 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
- 要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
- 要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。
MSDN标准示例代码
- // crt_rand.c
- // This program seeds the random-number generator
- // with the time, then exercises the rand function.
- //
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- void SimpleRandDemo( int n )
- {
- // Print n random numbers.
- int i;
- for( i = 0; i < n; i++ )
- printf( " %6d\n", rand() );
- }
- void RangedRandDemo( int range_min, int range_max, int n )
- {
- // Generate random numbers in the half-closed interval
- // [range_min, range_max). In other words,
- // range_min <= random number < range_max
- int i;
- for ( i = 0; i < n; i++ )
- {
- int u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min)
- + range_min;
- printf( " %6d\n", u);
- }
- }
- int main( void )
- {
- // Seed the random-number generator with the current time so that
- // the numbers will be different every time we run.
- srand( (unsigned)time( NULL ) );
- SimpleRandDemo( 10 );
- printf("\n");
- RangedRandDemo( -100, 100, 10 );
- }
- from:http://blog.csdn.net/xiaoting451292510/article/details/17550161
C++中 Rand随机序列函数的更多相关文章
- 转:随机函数 C++中rand()函数的用法
转自:http://blog.163.com/wujiaxing009@126/blog/static/719883992011113011359154/ 一.C++中不能使用random()函数 ...
- C++中rand()函数的用法
C++中rand()函数的用法 2011-12-30 11:03:59| 分类: C / C++|举报|字号 订阅 一.C++中不能使用random()函数 random函数不是ANSI C标准 ...
- C++中的随机数函数(
标签:ul 随机数 c 整数 max 教育 C++中产生随机数种子对于刚開始学习的人一直都非常困惑.大家知道,在C中有专门的srand(N)函数能够轻松实现这一功能,然而在C++中则要复杂一些.以下 ...
- Mysql中常用的函数汇总
Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回 ...
- Mysql中的常用函数:
Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...
- numpy函数库中一些常用函数的记录
##numpy函数库中一些常用函数的记录 最近才开始接触Python,python中为我们提供了大量的库,不太熟悉,因此在<机器学习实战>的学习中,对遇到的一些函数的用法进行记录. (1) ...
- LoadRunner中的Web 函数列表
LoadRunner中的Web 函数列表 web test LoadRunner fuction_list D:\Program Files (x86)\Mercury Interactive\Mer ...
- SQL Server中存储过程与函数的区别
本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个.而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行.执行的本质都一样. 函数限制比较多,比如不能用临 ...
- MATLAB中的参数估计函数详解及调用示例【联合整理】
前言 因为最近项目上的需要,才发现MATLAB的统计工具箱中的参数估计函数,觉得很简单很好用,现在把所有的参数估计函数整理一下,并在最后面附上调用示例. 参与人员 由于时间关系,这篇随笔是两个人一起整 ...
随机推荐
- Linux下添加自定义脚本到开机自启动,标准rpm,举例:设置Apache自启动
写一个脚本,名字为:autostart.sh,放在/etc/init.d/目录下,赋予权限chmod +x /etc/init.d/autostart.sh 代码如下 #!/bin/sh #chkco ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记14
day14课程内容: 深浅拷贝 #浅拷贝只能拷贝一层s=[1,'a','b']s1=s.copy()#浅拷贝print(s1)#[1, 'a', 'b']s[0]=2print(s1,s)#[1, ' ...
- windows转mac-开发环境搭建(二):mac上java环境搭建
1.首先下载jdk,地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.安 ...
- UVA1600 状态BFS
刚开是我用了一种很笨的bfs过掉的,后来看到原来还可以三维带状态BFS,觉得是一个不错的思路. d[x][y][k]表示坐标位于(x,y)经过K个障碍到达时的最短路径,当然如果(x,y)处的数字是0就 ...
- spring boot admin + spring boot actuator + erueka 微服务监控
关于spring boot actuator简单使用,请看 简单的spring boot actuator 使用,点击这里 spring boot admin 最新的正式版本是1.5.3 与 spri ...
- AES-256加密解密
/// <summary> /// AES-256加密 /// </summary> /// <param name="toEncrypt">& ...
- Django2.0文档
第四章 模板 1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% e ...
- MFC: 获得关机消息;阻止Windows关机
WM_QUERYENDSESSION消息是Windows向你询问Windows能否关闭,WM_ENDSESSION消息表示提示你Windows即将关闭.故当应用程序退出时, WM_QUERYENDSE ...
- ffmpeg结构体以及函数介绍(三)
1 AVPacket typedef struct AVPacket { /** * Presentation timestamp in AVStream->time_base units; t ...
- FusionCharts 3D帕累托图
1.设计3D帕累托图的页面 Pareto3D.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&q ...
