博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++】随机数引擎
阅读量:5133 次
发布时间:2019-06-13

本文共 1182 字,大约阅读时间需要 3 分钟。

rand()

  • 基本:使用随机数时,经常见到的是C标准库提供的函数rand(),这个函数会生成一个0RAND_MAX之间的一个整形数;
  • 分布:为了得到一个给定范围内的随机数,通常会对生成的随机数取余:rand()%n,rand()%(n-m)+m
  • 种子:通过srand()设置随机数种子,种子不变的情况下,每次程序运行,调用rand(),都会生成相同的随机数序列
  • 浮点:使用double(rand())/RAND_MAX可以生成0-1范围内的随机浮点数,但精度会有问题;
  • 一般情况下,srand()种子可以使用time(0)进行设置,time()取系统的秒,所以如果srand()和rand()的调用间隔小于1s,则会生成相同的随机数,如:
    for (size_t i = 0; i < 10; i++)    {        srand(time(0));        cout << rand() << endl;    }

     

 

C++11 : default_random_engine

  • 基本:C++11提供了新的随机数生成器,随机数引擎default_random_engine,使用时包含头文件#include<random>
  • 范围:默认情况下,default_random_engine的生成范围是一个unsigned,可以通过方法min()和max()获取生成范围;
  • 种子:与rand()类似,default_random_engine也需要通过随机数种子改变生成的序列,设置方法可以通过调用方法seed()
  • 分布和浮点:随机数引擎可以通过分布对象设置生成范围,uniform_int_distribution<unsigned>或uniform_real_distribution<double>
  • 相对rand(),可以使用uniform_real_distribution<>生成随机浮点数,并且不用担心精度问题,随机数引擎的使用方法如下:
    default_random_engine e;//定义随机数引擎    uniform_int_distribution
    id(1, 10);//整型分布 uniform_real_distribution
    dd(0, 1.0);//浮点型分布 e.seed(10);//设置随机数种子 for (size_t i = 0; i < 10; i++) { cout << id(e) << " ; " << dd(e) << endl; }

     

 

 

 

 

 

转载于:https://www.cnblogs.com/esCharacter/p/9564660.html

你可能感兴趣的文章
Android Studio
查看>>
zz 圣诞丨太阁所有的免费算法视频资料整理
查看>>
【大数模板】C++大数类 大数模板
查看>>
【123】
查看>>
《收获,不止Oracle》pdf
查看>>
用户权限设置
查看>>
java 之equals与"=="的区别
查看>>
LinkedList<E>源码分析
查看>>
学习微软 Excel 2002 VBA 编程和XML,ASP技术
查看>>
游戏开发常用算法
查看>>
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Intellij IDEA(eclipse设置)常用快捷键
查看>>
深入理解Java:注解(Annotation)基本概念
查看>>
NAT基本原理
查看>>
Java Content Repository API 简介 转自(https://www.ibm.com/developerworks/cn/java/j-jcr/)
查看>>
visio二次开发——图纸解析
查看>>
Activity之间的跳转:
查看>>
iTunes Connect 开发者上手经验(转)
查看>>
vertical-align你为什么不生效
查看>>