C++ rand,srand用法

128bit整数范围的随机数生成器 注:本文“128bit整数范围”指“-2↑127~2↑127-1”。另外,由于编辑器的bug,在非代码部分用“↑”来表示乘方符号 最近我对随机数非常感兴趣,于是我就写了一个范围为**-2↑127~2↑127-1**随机数生成器的代码,下面给出我所写的随机数代码(Python3): def randfor128bit(n): m=n+4 n127=170141183460469231731687303715884105728 #2^127 n128=340282366920938463 阅读详情

计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。) 

 

我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。

 

1.rand()

功能:随机数发生器

 

用法:int rand(void)

 

所在头文件: stdlib.h

 

rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。

 

rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。

 

用户未设定随机数种子时,系统默认的随机数种子为1。

 

rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。

 

2.srand()

功能:初始化随机数发生器

 

用法: void srand(unsigned int seed)

 

所在头文件: stdlib.h

 

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

 

3.使用当前时钟作为随机数种子

rand()产生的随机数在每次运行的时候都是与上一次相同的。若要不同,用函数srand()初始化它。可以利用srand((unsigned int)(time(NULL))的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。

 

4.产生随机数的用法

1) 给srand()提供一个种子,它是一个unsigned int类型;

2) 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

 

0~RAND_MAX之间的随机数程序

#include <iostream>

#include <stdlib.h>

#include <time.h> 

 

using namespace std; 

/*std 是一个命名空间..
不同的命名空间可以有相同的类名被定义 ..
using namespace std;
就是指明下面的程序使用std,如果不用这句指明的话就要用std::string(string是std空间中定义的
也可以在全局空间中定义,只要名字空间不一样即可..)..
否则可以默认名字空间中有std.便不用std::来修饰
它是C++新标准中有的,解决多人作编大程序时名字冲突问题。比如A B两个班都有叫张三的人,你要使用A班的张三,必然要先指名是A班这个名字空间(namespace),然后你对张三的所有命令才能达到你的预想,不会叫错人 
如果你用#include<iostream.h>就不需写这句话(旧标准)。但是如果你用
#include<iostream>就必须要写。
---------------------------*/

 

int main()

{ 

        srand((unsigned)time(NULL)); 

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

                cout << rand() << '/t'; 

        cout << endl; 

        return 0;

}

 

5.产生一定范围随机数的通用表示公式

要取得[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)。

c++随机数生成进阶random与随之种子生成器的使用 生成指定范围内的真随机数,使用random函数和random类的区别,随机数种子的使用。 阅读详情

相关推荐

【C++】产生随机数 rand 和 srand 函数用法详解

在上述代码中,(MAX_VALUE - MIN_VALUE + 1)的值为 9,这是目标范围内整数的个数。余数运算符(%)返回的值是 0〜8 的数字,再用它加上 MIN_VALUE(也就是 10),即可获得 10〜18 的随机数。当使用通过 rand 函数返回的正整数除以6时,余数将是 0〜5 的数字。在 C++ 中,这是通过调用。在上述公式中,minValue 是范围内的最小值,而 maxValue 则是范围内的最大值。这意味着它们具有随机数的表现和属性,但实际上并不是随机的,它们实际上是用算法生成的。

瞌睡的博客 2342

[转]C/C++中产生随机数(rand,srand用法)

http://zhangjunhd.blog.51cto.com/113473/197020 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)    我们知道rand()函数可以用来产生随机...

caoruntaogmail的博客 4912

C语言编写的0~1的随机数的产生

C语言编写的0~1的随机数的产生,写成了子程序的形式,可以在任何要用的C程式中调用

c语言 随机数0~1

c语言 随机数0~1

xuelang532777032的博客 2597

TMS320C6678开发笔记1-6---C6678单核烧写程序

第6节 单核烧写加载程序 6.1节 TI参考文档 参考文档:《KeystoneI Bootloader Resources and FAQ》讲的非常好,建议一定要看 https://processors.wiki.ti.com/index.php/KeystoneI_Bootloader_Resources_and_FAQ#Direct_Boot_Examples_.28without_IBL.29 里面有三个工程: C6678 EVM SPI boot example C6657 EVM ..

kunkliu的博客 5692

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解 1. 概览 在开始具体讨论卡尔曼滤波和匈牙利算法之前,首先我们来看一下基于检测的目标跟踪算法的大致流程。 2. 卡尔曼滤波(Kalman filter) 目标跟踪中使用的就是最基础的 Kalman filter 算法。这里也仅仅讨论最基础的 Kalman filter 算法。 卡尔曼滤波算法的过程很简单,如下图所示。最核心的两个步骤就是预测和更新(下图的 correct)。 在目标跟踪任务中,目标的

生命在于折腾! 2万+

C++中随机函数rand()和srand()的用法

一、rand()   函数名:   rand      功   能:   随机数发生器    用   法:   int rand(void);     所在头文件: stdlib.h   函数说明 :                 rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定                 的范围里可看成

peixuan的专栏 3万+

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 493

C++中rand()和srand()的用法

 一、rand()   函数名:   rand     功   能:   随机数发生器    用   法:   int rand(void);     所在头文件: stdlib.h   函数说明 :                 rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定                 的范围里可看成是随机的。

wujiafei_njgcxy的博客 476

S32K144之芯片锁死解锁——进入HardFault

S32K144之芯片锁死解锁——进入HardFault 最近遇到因为软件代码问题导致进入HardFault,从而使芯片锁死,来简述具体现象以及最终的解锁方法。 导致原因:如下图,在进行Gpio的相关配置,case后面没有break语句,导致芯片进入HardFault。 现象1:reset引脚持续为低,reset指示灯常亮。如果掉电后重新上电,通过示波器抓取reset引脚的波形,会有510us左右或者29ms左右的低电平脉冲出现,一般会出现两三次左右并且没有规矩,持续几秒的高电平之后,reset脚再次被拉低

weixin_41935674的博客 8271

FPGA原理与结构(3)——存储单元(Storage Elements)

触发器,锁存器,寄存器,为什么xilinx推荐高电平复位,为什么latch依然存在,FPGA中的触发器与锁存器

apple_53311083的博客 2961

C++ 随机函数rand()和srand()的用法

一、rand() 函数名:rand 功能:随机数发生器 用法:int rand(void); 所在头文件: stdlib.h 函数说明 : rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定 的范围里可看成是随机的。 ...

qq_27278957的博客 1845

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1212

C++中随机函数rand()和srand()的用法以及time()的使用

一、rand()   函数名:   rand      功   能:   随机数发生器    用   法:   int rand(void);     所在头文件: stdlib.h   函数说明 :                 rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定                 的范围里可看成

lyj2014211626的博客 4221

主成分分析(PCA)简洁高效MATLAB实现详解

本文介绍了一个简洁高效的PCA算法实现。该实现通过SVD分解计算主成分,避免了显式协方差矩阵计算,支持两种降维方式:固定维度或按能量比例自动选择。核心步骤包括数据中心化、SVD分解和维度选择,代码量少但功能完整,适用于数据预处理、降维和特征提取等任务。实现中考虑了稀疏矩阵转换、默认参数处理等细节,可直接应用于MATLAB环境。

m0_62153576的博客 63

凝聚态物理新引擎:AI 驱动材料预测与相变识别大突破

摘要:本文深入探讨 AI 在凝聚态物理中的创新应用。在材料性质预测方面,AI 借助数据收集、特征提取和模型训练,能依据材料微观信息准确预估其宏观性质,以石墨烯为例验证了高效性。对于拓扑相变识别,AI 通过分析量子力学数据,利用机器学习算法判别相变节点,助力拓扑绝缘体研究。尽管面临数据质量、模型可解释性等挑战,但未来多模态数据融合、可解释 AI 等发展方向,将推动 AI 与凝聚态物理深度融合,助力探索物质奥秘与新材料研发。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1825

C++中rand()和srand()函数用法

标准库(被包含于中)提供两个帮助生成伪随机数的函数:   函数一:int rand(void); 从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。   函数二:void srand(unsigned seed); 参数seed是rand()的种子,用来初始化rand()的起始值。   可以认为rand()在每次被调用的

u012989088的专栏 945

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C++关于随机数的用法,srand,rand

一般C++程序员可通过两个步骤生成随机数 1.设置随机数种子 2.通过复杂的数学运算生成序列的下一个数 如果用第二种,虽然序列几乎不可能预测,但他仍具有确定性(因为它是由上一个数计算而来)。为防止下一个数被预测,就必须设置种子,而且每次都不同;从哪里获取这样一个数呢? 很简单–系统时间 获取随机数 首先引入头文件 include <cstdlib> //支持rand和srand函...

weixin_45907018的博客 1896

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++中的srand()和rand()用法解析

C++中的srand()和rand()用法解析

《致青春》——云梦泽 6538

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++ srand()和rand()用法

参考计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。

qaaaaaaz的博客 851
上一篇: 被唤起的睡梦
下一篇: Today‘s schedule
Walker Zhang
博客等级 码龄14年 144粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值