1. 计算机的随机数是怎么产生的
楼主您好!
在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡罗模拟法计算的时候等等。
产生随机数有多种不同的方法。这些方法被称为随机数发生器。随机数最重要的特性是它在产生是后面的那个数与前面的那个数毫无关系。
真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。
在实际应用中往往使用伪随机数就足够了。这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算方法产生的。它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。
在真正关键性的应用中,比如在密码术中,人们一般使用真正的随机数。
2. 什么是随机数及随机数种子,能不能详细通俗介绍一下
随机数就是就随机数种子中取出的数。种子就是个序号,这个序号交给一个数列管理器,通过这个序号,你从管理器中取出一个数列,这个数列就是你通过那个序号得到的随机数。
但这个随技术并不真正随机。因为它是通过某个算法的得到。也就是说你给数列管理器同一个序号将得到同样一个“随机”数列。
也就是说种子和随机数列是一一对应的。{An}=f(x), x 就是种子,F()是算法,{An}是数列,这个数列看上去是随机的,这是因为An的通项很复杂。
例如:
从1、2、3、4、5、6、7、8、9、0这十个数中随机取出一个数,取出的数是6的话,那么6就叫随机数。十个数字就叫随机数种子。
如果是从1到50之间取数字,取出的数字叫随机数,这1到50那50个数字就叫随机数种子。
(2)算法初始化随机种子输出随机数扩展阅读:
根据密码学原理,随机数的随机性检验可以分为三个标准:
统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。
密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。
真随机性。其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。
相应的,随机数也分为三类:
伪随机数:满足第一个条件的随机数。
密码学安全的伪随机数:同时满足前两个条件的随机数。可以通过密码学安全伪随机数生成器计算得出。
真随机数:同时满足三个条件的随机数。
3. 什么叫随机数种子
VB的随机数即使用Rnd函数生成的随机数值。种子,为初始值,用来生成伪随机数字。
Rnd 函数,返回一个包含随机数值的 Single。
说明
如果没有使用 Randomize,则(无参数的)Rnd 函数使用第一次调用 Rnd 函数的种子值。
Randomize 语句示例
本示例用 Randomize 语句初始化随机数生成器。由于忽略了数值参数, 所以
Randomize 用 Timer 函数的返回值作为新的随机数种子值。
Dim MyValue
Randomize ' 对随机数生成器做初始化的动作。
MyValue = Int((6 * Rnd) + 1) ' 生成 1 到 6 之间的随机数值。
4. C语言中怎样生成随机数
在VC中设计到随机数有两个函数
srand() and rand()
srand() 的作用是是一个种子,提供每次获得随机数的基数而已,rand()根据种子而产生随机数
注意
1:srand() 里的值必须是动态变化的,否则得到的随机数就是一个固定数
2:其实可以不用写srand() ,只用rand()就可以了,省事,简单,例子如下
如果我们想得到一个 0-60的随机数那么可以写成
int i;
i=rand()%60;
就可以了。
当然最好有个统一的标注如下:
int i;
srand((unsigned)time( NULL ));
i=rand()%60;
这样就OK了。
5. c语言中如何生成1个0到1的随机数
C语言中生成1个0到1的随机数可以执行语句:float b=rand()/(RAND_MAX+1.0);
解析:
标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。rand()函数没有输入参数,直接通过表达式rand()来引用;
用函数rand取得的随机数除以(RAND_MAX+1.0),即可确保得到的结果在0到1之间。ISO IEC 9899 2011 (C11)标准中未规定 RAND_MAX 的具体数值。但该标准规定了RAND_MAX 的值应至少为32767。编程的时候,不应该对 RAND_MAX 的具体数值做任何假设。
(5)算法初始化随机种子输出随机数扩展阅读:
相关说明:
1、因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机。
2、为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。
3、随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
6. 编程问题求算法:输入一组数据,输出一组随机数,要求包括所有的数据。
前几天才写的,新鲜热辣。你把100改为10即可。
#include
<stdio.h>
#include
<stdlib.h>
#include
<time.h>
#define
SEQLEN
100
int
main(int
argc,
char**
argv)
{
int
i
=
0;
int
seq[SEQLEN];
//
不直接产生随机数,而是产生随机位置,再到序列中提取相应位置上的数字。
for
(i
=
0;
i
<
SEQLEN;
i++)
{
seq[i]
=
i+1;
}
//
初始化种子。
int
seed
=
(int)time(NULL);
printf("%d\n",
RAND_MAX);
for
(i
=
0;
i
<
SEQLEN;
i++)
{
//
每次得到随机数后,放大的因子从100到1逐步缩小。
int
offset
=
(int)((double)rand_r(&seed)*(SEQLEN-i)/RAND_MAX);
//
每得到一个随机位置后,就把序列中相应位置上的数字替换到序列后部。
int
tmp
=
seq[offset];
seq[offset]
=
seq[SEQLEN-i];
seq[SEQLEN-i]
=
tmp;
}
for
(i
=
0;
i
<
SEQLEN;
i++)
{
printf("%3d,
",
seq[i]);
if
(i
%
10
==
9)
{
printf("\n");
}
}
printf("\n");
return
0;
}
7. 代码里的srand(time(0))是什么意思
代码里的srand(time(0))的意思是:用当前时间来设定rand函数所用的随机数产生算法的种子值。
其中,time(time_t *t); 是C标准库函数,如果t是空指针,直接返回当前时间。如果t不是空指针,返回当前时间的同时,将返回值赋予t指向的内存空间。
srand (unsigned seed)函数中参数 unsigned seed 表示随机数产生器的初始值(种子值)。srand设置产生一系列伪随机数发生器的起始点,要想把发生器重新初始化,可用1作seed值。任何共它的值都把发生器匿成一个随机的起始点。rand检索生成的伪随机数。
(7)算法初始化随机种子输出随机数扩展阅读:
随机数生成的相关说明:
1、(double)rand() / RAND_MAX,表示生成一个 0~1.0 之间的随机浮点数:
RAND_MAX指的是 C 语言标准库 <stdlib.h> 中定义的一个宏,是 <stdlib.h> 中伪随机数生成函数 rand 所能返回的最大数值。rand 返回 0~RAND_MAX 之间的随机数。(double)rand() / RAND_MAX得到一个 0~1.0 之间的随机浮点数。
2、srand函数与rand函数的关系:
在任何调用srand之前调用rand与以1作为seed调用srand产生相同的序列。此函数可以设定rand函数所用的随机数产生算法的种子值。任何大于一的种子值都会将rand随机数所产生的虚拟随机数序列重新设定一个起始点。
8. 电脑随机数产生的计算具体方法
实现的方法和详细的操作步骤如下:
1、第一步,为main函数指定一个函数,如下图所示,然后进入下一步。
9. 电脑如何产生随机数
电脑产生的随机数称为伪随机数,是通过算法模拟的,看上去和随机数一样,实际上能算出来的数就是可以预见的数(对用户来说不可预见,对电脑则是可预见),不是真正的随机数。
从一个大数“种子”开始重复某种迭代计算,通常是加减乘除加求余,种子可以取系统时间,因为用户不可能精确到微秒控制程序运行,就基本保证了每次生成数值的顺序不同
一般来说如果用数字电路产生的都是伪随机数,但由于循环时间太长可视为随机数。而现在有用模拟电路产生的随机数,主要原理是将热噪声放大,然后编码。
(9)算法初始化随机种子输出随机数扩展阅读
随机数的作用
随机数的使用历史已经有数千年。无论是抛硬币还是摇色子,目的是让随机概率决定结果。电脑中的随机数生成器的目的也是如此——生成随机不可预测的结果。
加密法要求数字不能被攻击者猜到,不能多次使用同样的数字。所以需要一种机制产生攻击者无法预测的数字,这些随机数对加密法至关重要,无论你是加密文件还是访问https协议网站,都需要用到随机数。
根据随机数的生成原理,我们把电脑随机数分为两类:“真”随机数和伪随机数。
要生成一个“真”随机数,电脑会检测电脑外部发生的某种物理现象。比如说,电脑可以测量某个原子的放射性衰变。根据量子理论,原子衰变是随机而不可测的,所以这就是宇宙中的“纯粹”随机性。攻击者永远无法预测原子衰变的发生时间,也就不可能猜出随机值。
10. 随机化算法 随机数的概念是什么
顾名思义.随机数就是随机生成的一个数字.不是人为生成的.这个随机数在产生之前.是不为人知的.
随机化算法是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。随机化算法基于随机方法,依赖于概率大小。