随机数生成器用的是什么原理,随机数生成器原理

2020-11-26 05:50:45 字数 5989 阅读 8134

1楼:匿名用户

1970年的资料是用串行位移寄存器,反馈输入叠加

随机数生成器原理

2楼:匿名用户

不懂。。。。鉴定完毕。。。-_-||问比尔盖次

3楼:匿名用户

这个要问数学老师

随机数表到处都有

原理就是随鸡选几个拉

电脑取随机数是什么原理,是真正的随机数吗

4楼:匿名用户

首先,「真随机

」也有不同的含义,若想要「真正的真随机」目测只能靠量子力学了。一般的所谓真随机不是指这个,而是指统计意义上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面说的也是这种。

答案是,计算机系统可以产生统计意义上的真随机数。

大部分程序和语言中的随机数(比如 c 中的,matlab 中的),确实都只是伪随机。是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的伪随机数。这意味着:

如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可**性)。

直观来想,计算机是一种可确定,可**的的设备,想通过一行一行的确定的**自身产生真随机,显然不可能。但是,我们或许可以迂回一下……

实现方法简单说就是软硬结合,或者说,引入系统外的变量(把软件,**,算法想象成一个封闭的系统)。

一个典型的例子就是 unix 内核中的随机数发生器(/dev/random),它在理论上能产生真随机。即这个随机数的生成,独立于生成函数,这时我们说这个产生器是非确定的。

具体来讲,unix 维护了一个熵池,不断收集非确定性的设备事件,即机器运行环境中产生的硬件噪音来作为种子。

比如说:时钟,io 请求的响应时间,特定硬件中断的时间间隔,键盘敲击速度,鼠标位置变化,甚至周围的电磁波等等……直观地说,你每按一次键盘,动一下鼠标,邻居家 wifi 信号强度变化,磁盘写入速度,等等信号,都可能被用来生成随机数。

更具体的,内核提供了向熵池填充数据的接口:

比如鼠标的就是

void add_mouse_randomness(__u32 mouse_data)

内核子系统和驱动调用这个函数,把鼠标的位置和中断间隔时间作为噪音源填充进熵池。

所以,结论是,程序和算法本身不能产生真随机,但是计算机系统作为整体可以迂回产生统计意义上的真随机。

参考:内核源码在/drivers/char/random.c

windows 中也有相对的随机数生成器,基本的思想是一致的

如果要求更高的话,也有专用的设备,可收集附近的电磁场等环境噪音来产生随机数

5楼:go蔡依林我爱你

是真正的随机数。实现这

一功能的程序叫伪随机数发生器。

不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。“种子”的值通常是用快速计数寄存器或移位寄存器来生成的。

6楼:匿名用户

当然不是,只能作一般随机数用

随机数生成的原理和方法

7楼:匿名用户

原理太高深,提供方法是

可以的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 之间的一个随机数(变量)复制到其它单元格中就可以同时产生多个

8楼:匿名用户

要生成多个 循环来比 的话

6个都循环比一边 如果有与之前重复的

重新生成 再执行 循环 对比 这样写不太好啊 而且 再执行的循环 可以放在一个函数里调用

但是 如果还是重复 再函数在自己调用自己 这样写不行吧有什么办法没有 。。。 希望能给个简单的例子我底子比较薄

9楼:二十加一

xn=axn-1 mod m

其中m和a是给定的常数

那么xn只能取0到m-1之间的任意数

这就是生成0到m-1之间整数的均匀分布

可以通过细化,来生成你所需要的区间内的随机数。

(其实很多统计软件都附带这个随机数的程序)

如何做一个软件..例如随机数生成器.用什么软件制作的.如果可以的话告诉我原理..谢谢

10楼:匿名用户

3.91 icepub_randomstringsl 函数原型:

int winapi icepub_randomstrings(char *strintergerbuff,int fromvalue,int tovalue,int num,char *fenge)

输入:fromvalue 最小值

tovalue 最大值

num 生成个数

fenge 分隔字符串

输出:strintergerbuff num个随机数返回码:

l vc连接lib方式声明

11楼:光棍之泪

有这么复杂吗?在vb中,产生随机数就是rnd()

如rnd 函数返回小于 1 但大于或等于 0 的值。

在调用 rnd 之前,先使用无参数的 randomize 语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子。

为了生成某个范围内的随机整数,可使用以下公式:

int((upperbound - lowerbound + 1) * rnd + lowerbound)

这里,upperbound 是随机数范围的上限,而 lowerbound 则是随机数范围的下限。

注意 若想得到重复的随机数序列,在使用具有数值参数的 randomize 之前直接调用具有负参数值的 rnd。使用具有同样 number 值的 randomize 是不会得到重复的随机数序列的。

---------------------------------

rnd 函数示例

本示例使用 rnd 函数随机生成一个 1 到 6 的随机整数。

dim myvalue

myvalue = int((6 * rnd) + 1) ' 生成 1 到 6 之间的随机数值。

12楼:匿名用户

#include

#include

int main()

上面的是产生一个随机数(纯随机)

如果要产生多个

#include

#include

#include

int main()

system("pause");

} 随机数需要一个种子,默认的种子是确定的,使用时间做种子每次都不一样。

电脑中的随机数是怎么生成的(硬件方面的原理)

13楼:匿名用户

http://baike.baidu.***/view/1127.htm

伪随机数的生成方法

一般地,伪随机数的生成方法主要有以下3种[6]:

(1) 直接法(direct method),根据分布函数的物理意义生成。缺点是仅适用于某些具有特殊分布的随机数,如二项式分布、泊松分布。

(2) 逆转法(inversion method),假设u服从[0,1]区间上的均匀分布,令x=f-1(u),则x的累计分布函数(cdf)为f。该方法原理简单、编程方便、适用性广。

(3)接受拒绝法(acceptance-rejection method):假设希望生成的随机数的概率密度函数(pdf)为f,则首先找到一个pdf为g的随机数发生器与常数c,使得f

[伪随机数发生器]

伪随机数发生器

(x)≤cg(x),然后根据接收拒绝算法求解。由于算法平均运算c次才能得到一个希望生成的随机数,因此c的取值必须尽可能小。显然,该算法的缺点是较难确定g与c。

因此,伪随机数生成器(prng)一般采用逆转法,其基础是均匀分布,均匀分布prng的优劣决定了整个随机数体系的优劣[7]。下文研究均匀分布的 prng。

随机数的“庐山真面目”

首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。

伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的。怎样理解呢?产生的伪随机数有时遵守一定的规律,有时不遵守任何规律;伪随机数有一部分遵守一定的规律;另一部分不遵守任何规律。

比如“世上没有两片形状完全相同的树叶”,这正是点到了事物的特性,即随机性,但是每种树的叶子都有近似的形状,这正是事物的共性,即规律性。从这个角度讲,你大概就会接受这样的事实了:计算机只能产生伪随机数而不能产生绝对随机的随机数。

(严格地说,这里的计算机是指由冯诺依曼思想发展起来的电子计算机。而未来的量子计算机有可能产生基于自然规律的不可重现的“真”随机数)。

电脑当中经常有个随机功能,请问其系统原理是什么?

14楼:匿名用户

随机:就是随机没有设定一个指定的数值或目标。由系统随意抽取(类似于抓阉)一个目标或数值进行显示或处理。

15楼:匿名用户

什么意思?随机功能?

c++工具中,随机数是怎样产生的?mathlab呢?java工具呢?原理一样吗??

16楼:

c++一般采用和系统时间搭配来产生随机数

经典的《c程序设计教程》是这样做的

#indclude"time.h"

srand(time(null));

int x;

x=rand();

楼主说的是matlab 吧

matlab产生随机数的方法有很多,因为matlab专门是用来做数值计算的

randon 浮点型

randperm(n) 整数型

betarnd 贝塔分布的随机数生成器

binornd 二项分布的随机数生成器

chi2rnd 卡方分布的随机数生成器

exprnd 指数分布的随机数生成器

frnd f分布的随机数生成器

gamrnd 伽玛分布的随机数生成器

geornd 几何分布的随机数生成器

hygernd 超几何分布的随机数生成器

lognrnd 对数正态分布的随机数生成器nbinrnd 负二项分布的随机数生成器

ncfrnd 非中心f分布的随机数生成器

nctrnd 非中心t分布的随机数生成器

ncx2rnd 非中心卡方分布的随机数生成器normrnd 正态(高斯)分布的随机数生成器poissrnd 泊松分布的随机数生成器

raylrnd 瑞利分布的随机数生成器

trnd 学生氏t分布的随机数生成器

unidrnd 离散均匀分布的随机数生成器unifrnd 连续均匀分布的随机数生成器weibrnd 威布尔分布的随机数生成器

java随机数生成就是采用math.random()方法random

public static double random()返回带正号的 double 值,大于或等于 0.0,小于 1.0。

楼主可以参阅api