广告位联系
返回顶部
分享到

C++中生成随机数的方法介绍

C语言 来源:互联网 作者:佚名 发布时间:2024-05-08 21:41:07 人浏览
摘要

背景 C++ 11 在头文件 #include 中定义了随机数库,也可以使用 C 中生成随机数的方法。 C 生成随机数 概述 C 语言中使用 rand() 函数产生 0 ~ RAND_MAX 范围内均匀分布到整数,其中 RAND_MAX 是和系统相

背景

C++ 11 在头文件 #include 中定义了随机数库,也可以使用 C 中生成随机数的方法。

C 生成随机数

概述

C 语言中使用 rand() 函数产生 0 ~ RAND_MAX 范围内均匀分布到整数,其中 RAND_MAX 是和系统相关的一个固定值。

1

2

3

4

5

#include<stdlib.h>

#include<time.h>

 

srand(time(nullptr));//设置随机数种子

rand();//产生一个随机数

限定随机数范围

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{//产生 [0,b) 范围内到随机数 

  int randoxNumber = rand() % b ;

}

{//产生 [a,b) 范围内到随机数

    int randoxNumber = a + rand() % ( b -a ) ;

}

{//产生 [a,b] 范围内到随机数

    int randoxNumber = a + rand() % ( b -a +1 ) ;

}

{//产生 [0,1] 范围内到随机小数

    double randoxNumber =rand() / RAND_MAX

}

{//产生 [0,1) 范围内到随机小数

    double randoxNumber =rand() / ( RAND_MAX +1 )

}

C++ 中的随机数

概述

C++ 11 在头文件 #include 中定义了随机数库,包括随机数生成器和随机数分布器。

随机数生成器

①.概述

随机数生成器用来使用指定的种子产生一个随机数。

②.random_device

random_device 是标准库提供到一个非确定性随机数生成器,使用硬件作为随机数来源,故其调用代价较高,一般用来产生随机数种子。

1

2

3

4

5

random_device rd;

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

{

  cout << rd() << endl;

}

在这里插入图片描述

③.default_random_engine

default_random_engine 是标准库提供的默认随机数生成器,其实现和编译器有关。

1

2

3

4

5

6

7

random_device rd;

   

default_random_engine r_eng(rd());

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

{

  cout << r_eng() << endl;

}

④.minstd_rand

minstd_rand 是标准库提供的采用线性同余算法的伪随机数生成器。

1

2

3

4

5

6

7

random_device rd;

   

minstd_rand   r_eng(rd());

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

{

  cout << r_eng() << endl;

}

⑤.mt19937

mt19937 是标准库提供的采用梅森旋转算法的伪随机数生成器,可以快速产生高质量到随机数。

1

2

3

4

5

6

7

random_device rd;

   

mt19937  r_eng(rd());

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

{

  cout << r_eng() << endl;

}

⑥.ranlux24_base

ranlux24_base 是标准库提供的采用带进位减法的伪随机数生成器。

1

2

3

4

5

6

7

random_device rd;

   

ranlux24_base  r_eng(rd());

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

{

  cout << r_eng() << endl;

}

随机数分布器

①.概述

随机数分布器用于限定生成随机数的范围及分布类型。

②.uniform_int_distribution

uniform_int_distribution 用于生成指定范围的均匀分布的整数。

1

2

3

4

5

6

7

8

random_device rd;//用于生成随机数种子

mt19937 r_eng(rd());//随机数生成器 

uniform_int_distribution<int> dis(1, 100);//随机数分布器 闭区间

 

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

{

  cout << dis(r_eng) << endl;

}

在这里插入图片描述

③.uniform_real_distribution

uniform_real_distribution 用于生成指定范围的均匀分布的浮点数。

1

2

3

4

5

6

7

8

random_device rd;//用于生成随机数种子

mt19937 r_eng(rd());//随机数生成器 

uniform_real_distribution<double> dis(1, 100);//随机数分布器 闭区间

 

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

{

  cout << dis(r_eng) << endl;

}

在这里插入图片描述

④.normal_distribution

normal_distribution 用于生成指定均值和方差的正态分布的浮点数。

1

2

3

4

5

6

7

8

random_device rd;//用于生成随机数种子

mt19937 r_eng(rd());//随机数生成器 

normal_distribution  <> dis(4, 1.5);//随机数分布器,均值、方差

 

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

{

  cout << dis(r_eng) << endl;

}

在这里插入图片描述

⑤.bernoulli_distribution

bernoulli_distribution 用于生成二项分布到布尔值,可以指定 true 的概率。

1

2

3

4

5

6

7

8

random_device rd;//用于生成随机数种子

mt19937 r_eng(rd());//随机数生成器 

bernoulli_distribution   dis( 0.6);//随机数分布器,生成 1 的概率是 0.6

 

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

{

  cout << dis(r_eng) << endl;

}

在这里插入图片描述

Qt 中的随机数

概述

Qt 中生成随机数的方法和 C 语言中差不多,对应到函数为 qsrand() 、qrand()。使用使需要包含头文件 #include 。

代码示例

1

2

3

4

5

6

7

auto seed = QDateTime::currentDateTime().toMSecsSinceEpoch();

 

qsrand(seed);

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

{

  qDebug() << qrand() % 10;// 0 - 9 范围

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • C++拷贝构造函数和赋值运算符重载介绍

    C++拷贝构造函数和赋值运算符重载介绍
    一,拷贝构造函数 1. 什么是拷贝构造函数 拷贝构造函数是特殊的构造函数。是用一个已经存在的对象,赋值拷贝给另一个新创建的已经存在
  • C++中生成随机数的方法介绍

    C++中生成随机数的方法介绍
    背景 C++ 11 在头文件 #include 中定义了随机数库,也可以使用 C 中生成随机数的方法。 C 生成随机数 概述 C 语言中使用 rand() 函数产生 0 ~ RA
  • c++项目中后缀名vcxproj和sln的区别及说明
    c++项目后缀名vcxproj和sln区别 `.vcxproj 文件 是 Visual Studio 中用于存储 C++ 项目配置和设置的 XML 文件。 它包含了项目的编译选项、链接选项、
  • C++项目实战之makefile使用

    C++项目实战之makefile使用
    makefile简介 一个工程中的源文件不计其数(一个项目有有很多的文件),现在的项目基本都是按模块进行划分的,而这些模块存放在若干目录中
  • c++的构造函数使用方式介绍
    1.什么是构造函数? C++中的构造函数是一种特殊的成员函数,用于在创建对象时进行初始化操作。 构造函数的名称与类名相同,没有返回类
  • Java集合中获取数据前驱和后继元素的实现
    使用场景 使用一致性hash时,如何找到一个hash值对应的临近节点,可以使用集合中获取数据的前驱和后继元素实现。 1. NavigableSet 和 Navigab
  • C++中sln,vcxproj,vcxproj.filters,lib,dll,exe的含义说明
    sln,vcxproj,vcxproj.filters,lib,dll,exe含义 建立工程 建立C++工程后会生成多个文件 例如 sln,sdf,vcxproj,vcxproj.filters,vcxproj.user这些都是文件的扩展名。
  • Qt6子窗口全屏显示的实现

    Qt6子窗口全屏显示的实现
    一、全屏显示效果 二、全屏相关函数 1,全屏显示函数 1 QWidget::showFullScreen(); // 此方法只对顶级窗口有效,对子窗口无效 2,恢复显示函数
  • Qt获取git版本信息的具体方法

    Qt获取git版本信息的具体方法
    今天又碰到这个问题了,想根据具体的git版本信息做代码问题确认。之前写过类似的文章,不是用的Makedown,今天规整一下。 2、具体方法
  • C#串行通信serialPort的使用
    System.IO.Ports.SerialPort类是C#中用于串行通信的类。它提供了一组属性和方法,用于配置串行端口、读取和写入数据,以及处理串行通信中的事
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计