标准库<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标准示例代码

  1. // crt_rand.c
  2. // This program seeds the random-number generator
  3. // with the time, then exercises the rand function.
  4. //
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <time.h>
  8. void SimpleRandDemo( int n )
  9. {
  10. // Print n random numbers.
  11. int i;
  12. for( i = 0; i < n; i++ )
  13. printf( "  %6d\n", rand() );
  14. }
  15. void RangedRandDemo( int range_min, int range_max, int n )
  16. {
  17. // Generate random numbers in the half-closed interval
  18. // [range_min, range_max). In other words,
  19. // range_min <= random number < range_max
  20. int i;
  21. for ( i = 0; i < n; i++ )
  22. {
  23. int u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min)
  24. + range_min;
  25. printf( "  %6d\n", u);
  26. }
  27. }
  28. int main( void )
  29. {
  30. // Seed the random-number generator with the current time so that
  31. // the numbers will be different every time we run.
  32. srand( (unsigned)time( NULL ) );
  33. SimpleRandDemo( 10 );
  34. printf("\n");
  35. RangedRandDemo( -100, 100, 10 );
  1. }
  2. from:http://blog.csdn.net/xiaoting451292510/article/details/17550161

C++中 Rand随机序列函数的更多相关文章

  1. 转:随机函数 C++中rand()函数的用法

    转自:http://blog.163.com/wujiaxing009@126/blog/static/719883992011113011359154/ 一.C++中不能使用random()函数   ...

  2. C++中rand()函数的用法

    C++中rand()函数的用法   2011-12-30 11:03:59|  分类: C / C++|举报|字号 订阅 一.C++中不能使用random()函数 random函数不是ANSI C标准 ...

  3. C++中的随机数函数(

    标签:ul 随机数 c 整数 max 教育  C++中产生随机数种子对于刚開始学习的人一直都非常困惑.大家知道,在C中有专门的srand(N)函数能够轻松实现这一功能,然而在C++中则要复杂一些.以下 ...

  4. Mysql中常用的函数汇总

    Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回 ...

  5. Mysql中的常用函数:

    Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...

  6. numpy函数库中一些常用函数的记录

    ##numpy函数库中一些常用函数的记录 最近才开始接触Python,python中为我们提供了大量的库,不太熟悉,因此在<机器学习实战>的学习中,对遇到的一些函数的用法进行记录. (1) ...

  7. LoadRunner中的Web 函数列表

    LoadRunner中的Web 函数列表 web test LoadRunner fuction_list D:\Program Files (x86)\Mercury Interactive\Mer ...

  8. SQL Server中存储过程与函数的区别

    本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个.而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行.执行的本质都一样. 函数限制比较多,比如不能用临 ...

  9. MATLAB中的参数估计函数详解及调用示例【联合整理】

    前言 因为最近项目上的需要,才发现MATLAB的统计工具箱中的参数估计函数,觉得很简单很好用,现在把所有的参数估计函数整理一下,并在最后面附上调用示例. 参与人员 由于时间关系,这篇随笔是两个人一起整 ...

随机推荐

  1. Elasticsearch-深入理解索引原理

    最近开始大面积使用ES,很多地方都是知其然不知其所以然,特地翻看了很多资料和大牛的文档,简单汇总一篇.内容多为摘抄,说是深入其实也是一点浅尝辄止的理解.希望大家领会精神. 首先学习要从官方开始地址如下 ...

  2. PHP的性能优化方法总结

    什么情况之下,会遇到PHP性能问题? 1:PHP语法使用不恰当. 2:使用PHP语言做了它不擅长的事情. 3:使用PHP语言连接的服务不给力. 4:PHP自身的短板(PHP自身做不了的事情). 5:我 ...

  3. Python使用Mysql官方驱动(取出dict类型的数据)

    简介 虽然Python有很多连接mysql的库,比如mysqldb, pymysql~这些都很方便,现在就教大家使用mysql的官方库来操作mysql. 安装 windows: 下载链接 选择自己的w ...

  4. python内置函数-compile()

    python的内置函数 compile()--编译. 这个函数有什么用呢? 一个最简单的例子, 就是我们的代码, 会被解释器读取,解释器读取后的其实是字符串, 然后通过compile编译后, 又转换成 ...

  5. linux 安全基本防护 用户提权 ssh访问控制

    linu安全应用 信息安全分类: 物理安全:主机/机房环境 系统安全:操作系统 应用安全:各种网络服务,应用程序 网络安全:网络访问控制,防火墙规则 数据安全:信息的备份与恢复,加密解密 管理安全:保 ...

  6. R实战 第三篇:数据处理(基础)

    数据结构用于存储数据,不同的数据结构对应不同的操作方法,对应不同的分析目的,应选择合适的数据结构.在处理数据时,为了便于检查数据对象,可以通过函数attributes(x)来查看数据对象的属性,str ...

  7. java线程池技术(二): 核心ThreadPoolExecutor介绍

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程池技术属于比较"古老"而又比较基础的技术了,本篇博客主要作用是个人技术梳理,没什么新玩意. 一.Java线程池技术的 ...

  8. 1.1 PCI总线的组成结构

    如上文所述,PCI总线作为处理器系统的局部总线,是处理器系统的一个组成部件,讲述PCI总线的组成结构不能离开处理器系统这个大环境.在一个处理器系统中,与PCI总线相关的模块如图1?1所示. 如图1?1 ...

  9. My97 DatePicker普通调用

    My97 DatePicker普通调用 1.设计源码 <%@ page language="java" import="java.util.*" page ...

  10. Linux显示一个二进制文件或可执行文件的完整路径

    Linux显示一个二进制文件或可执行文件的完整路径 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ which halt /sbin/halt