随机数字生成器,随机数生成器

2023-03-16 2:31:18 最新游戏资讯 lvseyouxi

*** C之随机数生成

有两个最主要的 *** 来生成随机数:

a) 通过测量某些随机的物理现象,然后补偿测量过程中可能出现的偏差。比如大气噪声、热噪声和其他外部电磁以及量子现象。从自然资源中获取熵的速度取决于被测量的潜在物理现象,因此它们的速率是有限的,往往比较慢。

b) 使用计算算法,可以产生明显随机结果的长序列,实际上由较短的初始值(称为种子)确定。结果是,如果种子的值是已知的,整个看似随机的序列可以被重复产生。这类随机数生成器被称为伪随机数生成器。这类生成器类型是非阻塞的,可以大量产生数据。

/dev/random 可以用作随机数生成器或者伪随机数生成器,取决于不同的实现。

在linux下,随机数生成器有一个容纳噪声数据的熵池,在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的 公钥 或 一次性密码本 。若熵池空了,对/dev/random的读操作将会被 阻塞 ,直到收集到了足够的环境噪声为止。这样的设计使得/dev/random是真正的 随机数发生器 ,提供了更大可能的随机数据熵,建议在需要生成高强度的密钥时使用。

/dev/urandom(“unblocked”,非阻塞的随机数发生器),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

FreeBSD操作系统实现了256位的Yarrow算法变体,以提供伪随机数流。与Linux的/dev/random不同,FreeBSD的/dev/random不会产生阻塞,与Linux的/dev/urandom相似,提供了密码学安全的伪随机数发生器,而不是基于熵池。而FreeBSD的/dev/urandom则只是简单的链接到了/dev/random。

OpenSSL的提供了RAND_bytes *** 生成随机数。在使用之前需要使用RAND_add向PRNG中添加种子及熵值。种子可以通过TSC生成。

CryptoAPI提供了CryptGenRandom *** 产生随机数。CryptGenRandom已经被废弃,应该使用新版CNG API:BCryptGenRandom

CPU指令rdrand从芯片的硬件随机数生成器中获取随机数

32位:

64位:

*** C采用了多种方式混合的形式,将OpenSSL随机数生成、OS随机数生成、硬件随机数生成再混淆随机数发生器的状态来生成强随机数。

参考文档:

随机数生成器

1. 随机数

2. 随机数生成

随机数 随机数表随机数表是人为的,为什么不可以自己生成一张,乱排几个数

随机数表是统计工作者用计算机生成的随机数组成,并保证表中每个位置上出现哪一个数字是等概率的,利用随机数表抽取样本保证了各个个体被抽取的概率相等. 真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等.这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高. 而通常我们使用的随机数表是使用伪随机数,这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算 *** 产生的.计算机或计算器产生的随机数有很长的周期性.它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征. 采用随机号码表法抽取样本,完全排除主观挑选样本的可能性,使抽样调查有较强的科学性. 用途 比如,对银行来说,银行的ID和密码非常脆弱.如果有随机数表,就可以防备此类事件.随机数表是指为每个客户指定各不相同的数字列表,申请时将该随机数表分配给客户,而不是按照一定的规律给出,这就安全很多. 再比如,要考察某公司的牛奶产品质量,想从800袋牛奶中抽取60袋,就可以在随机数表中选中一数,并用向上、下、左、右不同的读法组成60个数,并按牛奶的标号进行检测,虽然麻烦,但很常用. 详细的举一例:某企业要调查消费者对某产品的需求量,要从95户居民家庭中抽选10户居民码表法抽选样本.具体步骤如下: 之一步:将95户居民家庭编号,每一户家庭一个编号,即01~95.(每户居民编号为2数) 第二步:在上面的表中,随机确定抽样的起点和抽样的顺序.假定从之一行,第5列开始抽,抽样顺序从左往右抽.(横的数列称“行”,纵的数列称为“列”) 第三步:依次抽出号码分别是:86、36、96、47、36、61、46、98、63、71,共10个号码.由于96、98两个号码不在总体编号范围内,应排除在外.再补充两个号码:62、74. 由此产生10个样本单位号码为:86、36、47、36、61、46、63、71、62、74. 编号为这些号码的居民家庭就是抽样调查的对象. 实际生活中,这些随机数表起着很大的作用,所以很多人会专门去寻找随机数表产生器.。

随机数函数如何使用

srand函数是随机数发生器的初始化函数,原型:

void srand(unsigned seed);

它需要提供一个种子,如:

srand(1);

直接使用1来初始化种子。

不过常常使用系统时间来初始化,即使用

time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970

到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型在传给srand函数,即:

srand((unsigned) time(t));

还有一个经常用法,不需要定义time_t型t变量,即:

srand((unsigned) time(NULL));

直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。

srand((int)getpid());

使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的

随机输出十个0-100之间的整数

#include

#include

#include

void main( void )

{

int i,k;

srand( (unsigned)time( NULL ) );

for( i = 0; i

什么是随机数?

随机数就是计算机随机产生的数字序列。伪随机数序列看上去是随机的,但是反复执行程序会发现每次程序所产生的序列是重复的。可以用srand来避免出现伪随机数,他用unsigned类型的数据作参数并未函数rand设置随机数种子。

c代码:

#includestdlib.h

1.

i=rand();产生0到RAND_MAX(32767)之间的整数

2.

unsigned seed;

srand(seed);设置种子

i=rand();

真随机数的定义是什么

从软件的角度来说,如果是计算机起卦,则要用到随机数,而电脑中的随机数是假的随机数,搞那么多年程序,我还没看到过什么玩意能够有真随机数,按现代科学定义的真随机数的产生条件有起码两个:1、真随机数数列是不可预计的,因而也不可能重复产生两个相同的真随机数数列.2、真随机数只能用某些随机物理过程来产生.例如:放射性衰变、电子设备的热噪音、宇宙射线的触发时间等等.在计算机中,为了满足信息熵的特性,常常是用到的信息源包括用户的人为反应或某种经过排列变形后的高频时钟的序列或者是用户运动鼠标的路径的坐标等,这在一般的程序里据我看是很少触及到的.因此,计算机上的起卦 *** 先不谈真随机数的如何的处理问题,还有取到了数又该如何变化的问题.如果更深化的话,还需要要论及世界的本质之类的哲学命题,暂且不表.就目前起卦程序主要在网上起而言,关联于时间的起卦法也许还有可商议之处,而对随机要求性较强的起卦 *** 是很不适合的. 1. 如何产生一定范围内的随机数?直接的 *** 是: rand() % N;返回从 0 到 N - 1 的数字.但这个 *** 不好,因为许多随机数发生器的低位比特并不随机.一个较好的 *** 是: (int)((double)rand() / ((double)RAND_MAX + 1) * N);如果你不希望使用 double,另一个 *** 是: rand() / (RAND_MAX / N + 1);两种 *** 都需要知道 RAND_MAX,而且假设 N 要远远小于 RAND_MAX.ANSI 规定标准头文件 stdlib.h 中包含 RAND_MAX 的 #define.顺便提一下,RAND_MAX 是个常数,它告诉你 C 库函数 rand() 的固定范围.你不可以设 RAND_MAX 为其它的值,也没有办法要求 rand() 返回其它范围的值.如果你用的随机数发生器返回的是 0 到 1 的浮点值,要取得范围在 0 到 N - 1 内的整数,只要将随机数乘以 N 就可以了.2. 为什么每次执行程序,rand() 都返回相同顺序的数字? 你可以调用 srand() 来初始化伪随机数发生器的种子,传递给 srand() 的值应该是真正的随机数,例如当前时间: #include #include srand((unsigned int)time((time_t *)NULL));请注意,在一个程序执行中多次调用 srand() 并不见得有帮助!不要为了取得“真随机数”而在每次调用 rand() 前都调用 srand()!3. 我需要随机的真/假值,所以我用直接用 rand() % 2,可是我得到交替的 0, 1, 0, 1, 0 . 这是个低劣的伪随机数生成器,在低位比特中不随机!很不幸,某些系统就提供这样的伪随机数生成器.请试着使用高位比特,具体请参考本文第 1 点.。

c语言,如何产生随机数

1、之一步,先定义int一个数组和int一个指针变量。

2、接着我们选择让指针指向数组的之一元素的地址。

3、接着使循环的条件为指针的尾地址。

4、并且因为这段代码每次循环后指针+1。

5、最后,让他进行输出。

6、最后编译运行完成后,便可以看到运行结果。

随机数生成 如何用matlab生成随机数函数

rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m*n的随机数矩阵 (现成的函数)另外:Matlab随机数生成函数betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布的随机数生成器 frnd f分布的随机数生成器 gamrnd 伽玛分布的随机数生成器 geornd 几何分布的随机数生成器 hygernd 超几何分布的随机数生成器 lognrnd 对数正态分布的随机数生成器 nbinrnd 负二项分布的随机数生成器 ncfrnd 非中心f分布的随机数生成器 nctrnd 非中心t分布的随机数生成器 ncx2rnd 非中心卡方分布的随机数生成器 normrnd 正态(高斯)分布的随机数生成器 poissrnd 泊松分布的随机数生成器 raylrnd 瑞利分布的随机数生成器 trnd 学生氏t分布的随机数生成器 unidrnd 离散均匀分布的随机数生成器 unifrnd 连续均匀分布的随机数生成器 weibrnd 威布尔分布的随机数生成器。

随机数生成的原理和 ***

原理太高深,提供 *** 是可以的

1、

在C++中可以的,函数是这样用,比如0至1的随机数

Random ran=new Random();

int RandKey=ran.Next(0,1);

不过这样会有重复,可以给Random一个系统时间做为参数,以此产生随机数,就不会重复了

System.Random a=new Random(System.DateTime.Now.Millisecond);

int RandKey =a.Next(10);

2、

在EXCEL中也有相应的函数

RAND( )

注解

若要生成 a 与 b 之间的随机实数:

=RAND()*(b-a)+a

如果要使用函数 RAND 生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按 F9,将公式永久性地改为随机数。

示例

RAND() 介于 0 到 1 之间的一个随机数(变量)

复制到其它单元格中就可以同时产生多个

c语言,如何产生随机数

1、之一步,先定义int一个数组和int一个指针变量。

2、接着我们选择让指针指向数组的之一元素的地址。

3、接着使循环的条件为指针的尾地址。

4、并且因为这段代码每次循环后指针+1。

5、最后,让他进行输出。

6、最后编译运行完成后,便可以看到运行结果。

c语言怎么生成随机数?

你好!

完整的代码,红圈处就是从上面100个数字中抽取到的数字:

#include stdio.h

#includestdlib.h; 生成随机数用

#includetime.h; 利用时间生成种子

#includemath.h

int main()

{

int i;

int a[100];

srand( time(NULL) ); 生成种子

for(i=0;i100;i++)

{

a[i]=rand()%1000+1000; 生成一个小于1000的随机数

然后加1000,变成 1000 - 2000之间的数

printf("%d ",a[i]); 打印

}

i=rand()%100; 随机抽取其中的一个数

printf("\n抽取到的是:%d\n",a[i]);打印

return 0;

}

随机数表随机数表是人为的,为什么不可以自己生成一张,乱排几个数

随机数表是统计工作者用计算机生成的随机数组成,并保证表中每个位置上出现哪一个数字是等概率的,利用随机数表抽取样本保证了各个个体被抽取的概率相等. 真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等.这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高. 而通常我们使用的随机数表是使用伪随机数,这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算 *** 产生的.计算机或计算器产生的随机数有很长的周期性.它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征. 采用随机号码表法抽取样本,完全排除主观挑选样本的可能性,使抽样调查有较强的科学性. 用途 比如,对银行来说,银行的ID和密码非常脆弱.如果有随机数表,就可以防备此类事件.随机数表是指为每个客户指定各不相同的数字列表,申请时将该随机数表分配给客户,而不是按照一定的规律给出,这就安全很多. 再比如,要考察某公司的牛奶产品质量,想从800袋牛奶中抽取60袋,就可以在随机数表中选中一数,并用向上、下、左、右不同的读法组成60个数,并按牛奶的标号进行检测,虽然麻烦,但很常用. 详细的举一例:某企业要调查消费者对某产品的需求量,要从95户居民家庭中抽选10户居民码表法抽选样本.具体步骤如下: 之一步:将95户居民家庭编号,每一户家庭一个编号,即01~95.(每户居民编号为2数) 第二步:在上面的表中,随机确定抽样的起点和抽样的顺序.假定从之一行,第5列开始抽,抽样顺序从左往右抽.(横的数列称“行”,纵的数列称为“列”) 第三步:依次抽出号码分别是:86、36、96、47、36、61、46、98、63、71,共10个号码.由于96、98两个号码不在总体编号范围内,应排除在外.再补充两个号码:62、74. 由此产生10个样本单位号码为:86、36、47、36、61、46、63、71、62、74. 编号为这些号码的居民家庭就是抽样调查的对象. 实际生活中,这些随机数表起着很大的作用,所以很多人会专门去寻找随机数表产生器.。

excel生成1到100的随机数

*** 一:

在Excel中,可以通过公式=RANDBETWEEN()来生成1到100的随机数:

=RANDBETWEEN(1,100)

*** 二:

也可以通过Data菜单中的“随机数生成器”来生成1到100的随机数,具体步骤如下:

1.点击“Data”菜单,在下拉菜单中选择“随机数生成器”;

2.在“随机数生成器”对话框中,输入1和100,勾选“均匀分布”;

3.单击“确定”按钮,即可在选定的单元格中生成1到100的随机数。

电脑如何产生随机数?

电脑产生的随机数称为伪随机数,是通过算法模拟的,看上去和随机数一样,实际上能算出来的数就是可以预见的数(对用户来说不可预见,对电脑则是可预见),不是真正的随机数。

从一个大数“种子”开始重复某种迭代计算,通常是加减乘除加求余,种子可以取系统时间,因为用户不可能精确到微秒控制程序运行,就基本保证了每次生成数值的顺序不同

一般来说如果用数字电路产生的都是伪随机数,但由于循环时间太长可视为随机数。而现在有用模拟电路产生的随机数,主要原理是将热噪声放大,然后编码。

扩展资料

随机数的作用

随机数的使用历史已经有数千年。无论是抛硬币还是摇色子,目的是让随机概率决定结果。电脑中的随机数生成器的目的也是如此——生成随机不可预测的结果。

加密法要求数字不能被攻击者猜到,不能多次使用同样的数字。所以需要一种机制产生攻击者无法预测的数字,这些随机数对加密法至关重要,无论你是加密文件还是访问https协议网站,都需要用到随机数。

根据随机数的生成原理,我们把电脑随机数分为两类:“真”随机数和伪随机数。

要生成一个“真”随机数,电脑会检测电脑外部发生的某种物理现象。比如说,电脑可以测量某个原子的放射性衰变。根据量子理论,原子衰变是随机而不可测的,所以这就是宇宙中的“纯粹”随机性。攻击者永远无法预测原子衰变的发生时间,也就不可能猜出随机值。

参考资料来源:

百度百科——随机数