当前位置:  编程技术>java/j2ee

不使用Math.random方法生成随机数(随机数生成器)

    来源: 互联网  发布时间:2014-10-31

    本文导语:  由于一些不可控因素的影响,比如系统内存,计算机状态等,每一次在while循环中执行的次数会有一定差异大概几百次。这就导致了结果的差异。注意这个程序使用了许多静态变量,也就是说,在下一个线程继续执行与上一个...

由于一些不可控因素的影响,比如系统内存,计算机状态等,每一次在while循环中执行的次数会有一定差异
大概几百次。这就导致了结果的差异。
注意这个程序使用了许多静态变量,也就是说,在下一个线程继续执行与上一个线程相同的run方法时,其初始值是上一个线程执行后的值,这形成了经典的蝴蝶效应,通过将这个差异放大,导致最终随机数的产生。
在这个程序中,一共开启了13个thread线程,每一次都会将那几个静态变量的值向混乱的方向推动,
于是最后得到的数组double[] bb的混乱程度几何上升,
最开始的bb[0]只有约几百个可能的值,而到了bb[3]就可以是65536个数据中的任何一个。
为了做到随机,我循环了13次,bb[12]几乎可以说是绝对的随机了。

代码如下:

/**
 * Author:Yuanhonglong
 * Date:2014-1-9
 */

public class MyRandom implements Runnable{

 private static int random;
 private static int f=127;
 private static int m=(int)Math.pow(2,16);
 private static int[] r=getR();
 private static int x=13;

 @Override
 public void run(){
  for(;!Thread.interrupted();){
   f=((f/2)+r[f])%m;
   random=r[f];
  }
 }

 private static int[] getR(){
                //将0-65536这65536个数按照一定顺序存入r[]中
  int[] r=new int[m];
  r[0]=13849;
  for(int i=1;i


    
 
 

您可能感兴趣的文章:

  • 请问Java随机数的使用?
  • php使用codebase生成随机数
  • C#使用伪随机数实现加密用户密码的方法
  • Python random模块(获取随机数)常用方法和使用例子
  • 使用c语言生成随机数的示例分享
  • 如何使用arm-uclibc-gcc将.c文件编译生成.a,将.c文件编译生成.cgi?
  • 如何使用gcc生成dynamic objs
  • 在Linux下使用GCC如何编译生成Windows下使用的DLL?
  • vim生成的.cpp~是什么文件?我使用vim编辑的时候出现了好多.cpp~文件
  • 请教各位高手,怎么才能使用XML生成一个数型菜单
  • 不知为何?使用aclocal不能生成aclocal.m4文件?请问是什么原因?
  • 使用GetInvalidFileNameChars生成文件名
  • 欢迎使用、加入Arrow项目开发--一个自动化代码生成工具
  • 寻 懂的redhat linux 下 . 使用automake和autoconf 自动生成Makefile 的 达人。
  • 请问在linux下面用flex生成的c程序在windows下可以正确使用吗?
  • oracle使用sql脚本生成csv文件案例学习
  • 如何在使用nohup的时候不让它生成nohup.out
  • 哪位高手指点一下:使用libxml2是否可以动态生成xml文件?
  • 使用log4j生成的.log文件,前缀中是不是必须含有当日日期?
  • LINUX 交叉编译后 生成的库如何使用 ?
  • gvim下如何使用已经用Ctags生成好的C++标准库的Tags?
  • 我想在任何地方使用package aaa;都能使aaa目录生成在同一个地方,而不是当前目录?
  • 在使用TC编译由 lex 生成的.c文件时遇到的一些问题,请高手指教!!!
  • 生成so共享库和使用
  • c++生成dll使用python调用dll的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • python生成器的使用方法
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • c/c++预处理命令预#,##使用介绍
  • asp程序使用的access在Linux下如何使用!
  • 在div中使用css让文字底部对齐的方法
  • 新装的Linux使用root用户不能使用FTP?
  • Python namedtuple(命名元组)使用实例
  • LINUX下使用Eclipse,如何使用交叉编译器?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3