`

随机数生成算法

阅读更多

chrome 有很多场景我们需要产生随机数。一般是采用线性同余法。

一。讲讲JAVA的Random函数吧。

Random在初始化时会产生一个种子。默认以seedUniquifier+System.nanoTime()作为种子。此后seedUniquifier会自增1.以便下一次Random时和这次不相同。seedUniquifier起初是一个常量。值为8682522807148012L.随机数产生过程为;

1。产生seend,根据系统时间.seed=++seedUniquifier + System.nanoTime(),seedUniquifier =8682522807148012L;

2.seed = (seed ^ multiplier) & mask;//multiplier = 0x5DEECE66DL;,mask = (1L << 48) - 1;

3.调用next方法可以生成一个随机数。先用上面的seed算出一个新的seed,如 nextseed = (oldseed * multiplier + addend) & mask;// addend = 0xBL;

4.(int)(nextseed >>> (48 - bits));//bits为需要产生的数的位数。如int型为32.

 

 

其实JAVA的Random随机数生成算法还是很弱的。属于线性适配随机发生器

二、Windows平台下随机数生成算法

首先建立一个动态数据缓冲池,缓冲池被释放之前,会不停的收集windows平台下众多的物理随机信息,包括:①当前进程的ID;②当前线程的ID;③系统引导以来的时钟数;④各种高精度的性能计数器;⑤用户环境模块的MD4(Message Digest 4,信息摘要4)散列,包括用户名,计算机名和搜索路径等;⑥高精度的内部CPU计算器,如RDISC,ROMSR,RDPM等;⑦底层系统信息,如空闲时间,内检时刻,中断时间,提交限定,页面计数,缓存计数,操作系统外部计数、键盘、鼠标信息等。

当程序需要随机数时,从这些缓冲池中读取这些物理信息,因为这些信息大部分均从物理量读取而来,所以有不可预测性,可以满足随机性的要求。

分享到:
评论

相关推荐

    随机数生成算法,数值算法

    随机数生成算法,产生一个介于0-32767之间的随机整数。

    正态散布随机数生成算法.pdf

    正态散布随机数生成算法.pdf

    随机数生成算法java

    随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法...

    随机数生产算法

    C语言随机数生成函数,非AD采用生成算法,效果挺不错。来源自ugui中代码

    CPP随机数_随机数生成_

    随机数生成算法

    论文研究 - 具有正态分布的随机数生成算法

    提出了一种基于中心极限定理的新算法,用于生成具有指定正态或高斯概率密度函数的伪随机数。 所建议的算法非常简单,但准确性很高,效率介于Box-Muller和von Neumann拒绝方法之间。

    智能手机相机使用的新型量子随机数生成算法

    智能手机相机使用的新型量子随机数生成算法

    史上最全的java随机数生成算法分享

    主要介绍了史上最全的java随机数生成算法,我分享一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法

    基于verilog的随机数产生器

    该代码采用了特定的随机数生成算法,并通过Verilog语言实现了随机数的生成和输出功能。 适用人群:该代码适用于具有FPGA编程和Verilog语言基础的硬件工程师、电子工程师以及对数字电路设计和随机数生成算法感兴趣的...

    JS实现随机数生成算法示例代码

    JS实现随机数生成算法的方法有很多,本文为大家介绍一个比较不错的方法,代码如下,感兴趣的朋友可以参考下,希望对大家有所帮助

    随机生成的帮助类C#实现

    生成伪随机数的过程基于种子值和随机数生成算法。种子值是作为生成算法的输入的起始值,不同的种子值会产生不同的随机数序列。而随机数生成算法则根据种子值计算出下一个随机数,并将其作为新的种子值继续计算后续的...

    一种软件生成真随机数的算法研究

    一种软件生成真随机数的算法研究一种软件生成真随机数的算法研究一种软件生成真随机数的算法研究

    随机数生成程序,matlab mex版本

    概率算法如模拟退火法、遗传算法等需要使用随机数,随机数生成质量极大影响算法的效率,该程序使用随机数生成算法比matlab标准的函数rand要好。可以使用matlab中的mex 编译为mexw文件(如何使用mex,见我上传的资源...

    xorshift:Xorshift随机数生成器

    Xorshift算法是最快的随机数生成器中已知的,它需要非常小的代码和状态。 该库已经过全面测试,以匹配C算法生成的参考号。 C语言的资源直接取自算法发明者George Marsaglia和Sebastiano Vigna的科学文章。 ...

    C语言实现的随机数(原创)

    取随机数,用C语言实现的。也没什么特别的,只是封装好方便自己以后用而已,有需要的朋友欢迎下载交流! (1)取随机数 (2)取【0,max】的随机数 (3)取【min,max】的随机数 例子请看资源:“VC写的字符界面...

    matlab_多维离散分布随机数的生成算法

    项目包含用于生成多维离散分布随机数的算法的源代码和Matlab示例。 多维离散分布随机数的生成算法

    高斯随机数生成算法对比研究 (2014年)

    针对应用学科仿真实验中所需高斯随机数质量要求日趋严格的问题,对比研究了高斯随机数常用的中心极限生成算法、Box-Muller算法和极化判决算法,研究了各算法在尾部区域内生成高斯随机数的质量.仿真结果表明:极化...

    利用密码技术或者专门的随机数产生算法产生随机数,并对产生的随机数进行统计分析

    rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数...

Global site tag (gtag.js) - Google Analytics