一、 C++ 中不能使用 random() 函数 , random 函数不是 ANSI C 标准,不能在 gcc,vc 等编译器下编译通过。可改用 C++ 下的 rand 函数来实现。

1 、 C++ 标准函数库提供一随机数生成器 rand ,返回 0 - RAND_MAX 之间均匀分布的伪随机整数。 RAND_MAX 必须至少为 32767 。 rand() 函数不接受参数,默认 seed 为 1 ,程序调用一次后将改变。随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)

2 、 C++ 中另一函数 srand (),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。

3 、 比较理想的是用变化的数,比如时间来作为随机数生成器的种子。 time 的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。

// C++ 随机函数( VC program )

#include <stdio.h>

#include <iostream>

#include <time.h>

using namespace std;

#define MAX 100

int main(int argc, char* argv[])

{         srand( (unsigned)time( NULL ) );//srand() 函数产生一个以当前时间开始的随机种子 . 应该放在 for 等循环语句前面 不然要很长时间等待

   for (int i=0;i<10;i++)

   cout<<rand()%MAX<<endl;//MAX 为最大值,其随机域为 0~MAX-1

   return 0;

}

二、 rand() 的用法

rand() 不需要参数,它会返回一个从 0 到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。 这样,如果你要产生 0~10 的 10 个整数,可以表达为:

   int N = rand() % 11;

这样, N 的值就是一个 0~10 的随机数,如果要产生 1~10 ,则是这样:

   int N = 1 + rand() % 11;

  总结来说,可以表示为:

   a + rand() % n

其中的 a 是起始值, n 是整数的范围。 a + rand() % (b-a+1) 就表示a~b之间的一个随机数。

  若要 0~1 的小数,则可以先取得 0~10 的整数,然后均除以 10 即可得到随机到十分位的 10 个随机小数,若要得到随机到百分位的随机小数,则需要先得到 0~100 的 10 个整数,然后均除以 100 ,其它情况依此类推。

另一种小数的产生方法。    用 rand() / double(RAND_MAX) 可以取得 0 ~ 1 之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模),举例:
double ran_numf=0.0;
srand((unsigned)time(0));
for(int i=0;i<10;i++){  
ran_numf = rand() / (double)(RAND_MAX);
cout<<ran_numf<<" ";
}
运行结果为: 0.716636 , 0.457725 , … 等 10 个 0 ~ 1 之间的浮点数,每次结果都不同。   
如果想取更大范围的随机浮点数,比如 1 ~ 10 ,可以将
rand() /(double)(RAND_MAX) 改为 rand() /(double)(RAND_MAX/10)
运行结果为: 7.19362 , 6.45775 , … 等 10 个 1 ~ 10 之间的浮点数,每次结果都不同。
至于 100 , 1000 的情况,如此类推。

通常 rand() 产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用 srand( seed ) 函数进行随机化,随着 seed 的不同,就能够产生不同的随机数。

如大家所说,还可以包含 time.h 头文件,然后使用 srand(time(0)) 来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列 ( 只要两次运行的间隔超过 1 秒 ) 。

参考资料:

《伪随机数 _ 百度百科》 http://baike.baidu.com/view/1127.htm

C++中如何产生随机数 http://hi.baidu.com/skywind_21flying/blog/item/fd2cef62b3e68adce6113aa7.html

C++ 中用 rand() 和 srand() 产生为随机数方法 http://hi.baidu.com/sdood/blog/item/4737297f573c8d0a28388a9c.html

伪随机数产生原理及用法相关推荐

  1. mysql 实时聚合分析,mysql累积聚合原理与用法实例分析

    本文实例讲述了mysql累积聚合原理与用法.分享给大家供大家参考,具体如下: 累积聚合为聚合从序列内第一个元素到当前元素的数据,如为每个员工返回每月开始到现在累积的订单数量和平均订单数量 行号问题有两 ...

  2. python装饰器原理-Python装饰器原理与用法分析

    这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念.原理.使用方法及相关操作注意事项,需要的朋友可以参考下 本文实例讲述了Python装饰器原理与用法.分享给大 ...

  3. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  4. python装饰器原理-Python函数装饰器原理与用法详解

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

  5. python装饰器原理-python装饰器原理与用法深入详解

    本文实例讲述了python装饰器原理与用法.分享给大家供大家参考,具体如下: 你会Python嘛? 我会! 那你给我讲下Python装饰器吧! Python装饰器啊?我没用过哎 以上是我一个哥们面试时 ...

  6. python定义私有变量的方法_Python面向对象程序设计之私有变量,私有方法原理与用法分析...

    本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法.分享给大家供大家参考,具体如下: 私有变量,私有方法:python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆 ...

  7. mysql 实时聚合分析_mysql滑动聚合/年初至今聚合原理与用法实例分析

    本文实例讲述了mysql滑动聚合/年初至今聚合原理与用法.分享给大家供大家参考,具体如下: 滑动聚合是按顺序对滑动窗口范围内的数据进行聚合的操作.下累积聚合不同,滑动聚合并不是统计开始计算的位置到当前 ...

  8. java 字节缓冲_Java字节缓冲流原理与用法详解

    本文实例讲述了Java字节缓冲流原理与用法.分享给大家供大家参考,具体如下: 一 介绍 BufferInputStresm和BufferOutputStream 这两个流类为IO提供了带缓冲区的操作, ...

  9. mysql的存储过程原理_mysql存储过程原理与用法详解

    本文实例讲述了Mysql存储过程原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018- ...

  10. python异常处理_汇总三大python异常处理、自定义异常、断言原理与用法分析

    本文实例讲述了python异常处理.自定义异常.断言原理与用法.分享给大家供大家参考,具体如下: 什么是异常: 当程序遭遇某些非正常问题的时候就会抛出异常:比如int()只能处理能转化成int的对象, ...

最新文章

  1. ROS关于cv_brige的使用
  2. 企业智能化升级之路:CSDN《2017-2018中国人工智能产业路线图V1.0》重磅发布
  3. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )
  4. FPGA篇(十一)modelsim命令行仿真提示“vsim 不是内部或外部命令,也不是可运行的程序或批处理文件”的解决办法 (转)
  5. es 精确查询不模糊_ES系列17:Terms聚合结果不精确,怎么破?
  6. Rowkey设计_HBase表设计
  7. 数据结构——排序算法(含动态图片)
  8. Swing应用程序中的CDI事件可将UI与事件处理分离
  9. oracle数据库相关知识,Oracle数据库相关知识点复习
  10. C++中1LL避免强制转换
  11. `json in遍历
  12. 基于react/vue的移动端终极适配方案(更新css-modules配置)
  13. matlab 遗传算法 ga函数,matlab遗传算法ga函数
  14. 2019年全国大学生电子竞赛 | 电磁炮制作教程
  15. git Untracked Files Prevent Rebase
  16. geek软件是干什么的_Geek软件下载工具使用说明.pdf
  17. octobercms mysql_OctoberCMS插件形成数据库关系(OctoberCMS plugin form database relationships)...
  18. Solidwork软件盗版
  19. AirDroid免root操作步骤
  20. InterConnect 和SmartConnect

热门文章

  1. 渐近记号Θ、Ο、o、Ω、ω详解
  2. 游鸿明歌曲白色恋人浅析
  3. Win7文件夹怎么加密
  4. 用ffmpeg把yuv格式转化为mpeg格式
  5. 修改记录-优化后(springboot+shiro+session+redis+ngnix共享)
  6. 基于python的客流统计_基于深度学习的客流量统计方法
  7. 思维导图组件@hellowuxin/mindmap的基本使用
  8. 计算机桌面机器人,桌面的 Spirit Rover(勇气号探测器),机器人爱好者的心头好!!...
  9. 孙德顺敛财10亿,看图挖掘计算如何穿透与识别多层嵌套影子公司!
  10. 全栈工程师是什么,为什么需要全栈工程师?