产生随机数在程序中很有用,这篇文章简单介绍一下产生随机数的方法。

伪随机数

使用标准库<cstdlib>中的rand()函数产生随机数。

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
for (int i = ; i < ; i++) cout << rand()% << endl;//pesudo radom
return ;
}

表面上看,这段程序会产生三个随机数,但一个有趣的事情是,每次程序运行时产生的数据都是相同的。

我每次运行的结果都如下:

可以看出,rand()函数并不会产生一个真正的随机数。

要产生真正的随机数,需要了解time函数。

time函数

<ctime>中的time函数可以返回一个时间。函数声明如下

time_t time(
time_t *timer
);

参数timer是一个指针,指向时间的存储位置。使用时参数可以为0。如果使用其他整数,比如1,会产生无法从int转换成timme_t的错误。

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
cout << time()<<endl;
return ;
}

对于time函数的返回值,一把理解应该是当前的时间,但事实运行结果却并不如所想。

事实上,这个结果便是当前时间,只是表示方法有所不同。这个值是从1970年1月1日午夜到现在的秒数。

真正的随机数

<cstdlib>中产生用于真正随机数的函数srand()。函数接受一个参数作为seed,用于控制rand()函数的算法。相同的seed会使rand()产生相同的结果。

所以,若要产生真正的随机数,可以使用时间作为seed,这样每次都会产生真正的随机数了。

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
srand(time());
for (int i = ; i < ; i++) cout << rand() << endl;//truly random
return ;
}

这样,在使用了stan()之后,rand便可产生真正的随机数了。

控制随机数的范围

可以使用模运算来控制随机数的范围。下面代码产生了[0,10)范围的随机数。

rand()%;

一个例子,展示了这篇文章提及的函数。

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
cout << time()<<endl;//返回一个秒数
for (int i = ; i < ; i++) cout << rand() << endl;//pesudo radom
srand(time());
for (int i = ; i < ; i++) cout << rand()% << endl;//truly random
return ;
}

首先输出一个秒数。

接着输出了3个随机数,这三个随机数每次都是相同的。

使用时间作为seed,rand()函数的返回值。

产生3个真随机数,其范围是[0,10)。

C++杂谈(三)产生随机数与time函数的更多相关文章

  1. Java 生成三位随机数

    调用这个Math.Random()函数能够返回带正号的double值,该值取值区间是[0.0,1.0),注意,它是左闭右开区间.返回值是一个伪随机选择的数,在该范围内(近似)均匀分布. 如果生成三位随 ...

  2. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)

    Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer   Advanced Installer :Free for 30 da ...

  3. JS笔记(三):数组、函数、类

    (一) 数组 //创建数组 var the_array = [1,2,3,4,'5'] console.log(the_array[0]) //读取索引为0的数据 the_array[5] = '赋值 ...

  4. iOS中 三种随机数方法详解

    ios 有如下三种随机数方法: //第一种 srand((unsigned)time(0)); //不加这句每次产生的随机数不变 int i = rand() % 5; //第二种 srandom(t ...

  5. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  6. 数据库三,exec内置函数

    数据库三,exec内置函数 一.数据库查询与执行顺序 必备知识 查询语句的基本操作 - select - from - where - group by - having - distinct - o ...

  7. Java生成三位随机数

    转: [转]Java生成三位随机数 public class Test2 { public static void main(String [] srgs) { int i=(int)(Math.ra ...

  8. 《ORACLE数据库管理与开发》第三章学习之常用函数记录

    <ORACLE数据库管理与开发>第三章学习之常用函数记录 注:文章中的*代表所要操作的列名 1.lower(*)/upper(*),将此列下的值转为小写/大写 2.initcap(*):把 ...

  9. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

随机推荐

  1. Scalaz(13)- Monad:Writer - some kind of logger

    通过前面的几篇讨论我们了解到F[T]就是FP中运算的表达形式(representation of computation).在这里F[]不仅仅是一种高阶类型,它还代表了一种运算协议(computati ...

  2. Java--Exchanger用于进行线程间的数据交换

    package com; import java.util.concurrent.Exchanger; /** * Created by yangyu on 16/11/28. */ /** * Ex ...

  3. 使用Bower作为Web包管理器

    Bower是一个简单易用的Web包管理器,通过它我们可以非常简便的安装各种Web框架和库,同时它也负责管理不同包之间的关系依赖. 安装Bower Bower需要 npm 和 Git 的支持,在安装Bo ...

  4. WPS 从今以后我再也不会用了 记录一下!

    一个双十一,金山忙得不亦乐乎,就往桌面上添加图标. 卸载掉你!!!!! 一些令人厌恶的动作: 1.强制弹广告. 2.强制弹新闻窗口:WPS热点:无法设置不再弹出. 3.强制自动升级.删了还会有. 4. ...

  5. easyUI 后台经典框架DEMO下载

    采用easyui 1.2.6 + jquery 1.7.2 设计 有不明白的朋友加群或加我QQ (709047174) Jquery-EasyUi-demo点击我下载

  6. 详细解读XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度

    本文主要参考:MDN 分析并操作 responseXML属性 如果你使用 XMLHttpRequest 来获得一个远程的 XML 文档的内容,responseXML 属性将会是一个由 XML 文档解析 ...

  7. javascript 不响应可能是引用外部javascript时,引用顺序不对。

    有相互引用关系的js,要最后执行的方法所在的js 先被引用. a.js 中有function1 b.js 中有function2 function1 () { function2(){} } 要 &l ...

  8. CALayer 易混淆的两个属性 - position和anchorPoint

    1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property CGPoint position;                           ...

  9. [IOS]《A Swift Tour》翻译(一)

    以下翻译内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3768936.html 碎碎念... Swift是苹果在WWDC刚发 ...

  10. umeng track 相关

    NSString * appKey = @"57105bbbe0f55a7938002063"; NSString * deviceName = [[[UIDevice curre ...