激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 不使用Math.random方法生成隨機數(隨機數生成器)

不使用Math.random方法生成隨機數(隨機數生成器)

2019-10-30 17:03java教程網 JAVA教程

不調用Math.random方法產生自己的隨機數,現代計算機運行速度很快,在主線程等待一定毫秒數時,其他線程就會執行run方法中的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<m;i++){
   r[i]=((2053*r[i-1])+13849)%m;
  }
  int k=r[65535];
  r[65535]=r[(f+1)%m];
  r[(f+1)%m]=k;
  return r;
 }

 private static void changeR(int[] r,int f){
                //對r[]進行移動
  int[] r1=new int[r.length];
  System.arraycopy(r,0,r1,0,r.length);
  for(int i=0;i<r.length;i++){
   r[i]=r1[(i+f)%m];
  }
 }

 public static double getRandom_0_1(){
  double[] dd=new double[13];
  for(int i=0;i<dd.length;i++){
   Runnable runnable=new MyRandom();
   Thread thread=new Thread(runnable);
   thread.start();
   try{
    Thread.sleep(x+1);
   }
   catch(InterruptedException e){
    e.getMessage();
   }
   thread.interrupt();
   double rr=(double)random/(double)m;
   x=f%13;
   changeR(r,11+(f/7));
   dd[i]=rr;
   if((i>0)&&(dd[i]==dd[i-1])){
    changeR(r,13+(f/11));
                                //防止不動點對程序的影響,當兩個值相同說明程序有可能進入了死胡同,也就是不動點,關于不動點的問題可以參考高等數學關于函數的知識
   }
  }
  double ran=dd[12];
  return ran;
 }

 public static void main(String[] args){
  double rs=getRandom_0_1();
  System.out.println(rs);
 }
}

 

MyRandom.java

 

復制代碼代碼如下:


?/**
 * Author:Yuanhonglong
 * Date:2014-1-9
 */
package mine.loop;

 

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<m;i++){
   r[i]=((2053*r[i-1])+13849)%m;
  }
  int k=r[65535];
  r[65535]=r[(f+1)%m];
  r[(f+1)%m]=k;
  return r;
 }

 private static void changeR(int[] r,int f){
  int[] r1=new int[r.length];
  System.arraycopy(r,0,r1,0,r.length);
  for(int i=0;i<r.length;i++){
   r[i]=r1[(i+f)%m];
  }
 }

 public static double getRandom_0_1(){
  double[] dd=new double[13];
  for(int i=0;i<dd.length;i++){
   Runnable runnable=new MyRandom();
   Thread thread=new Thread(runnable);
   thread.start();
   try{
    Thread.sleep(x+1);
   }
   catch(InterruptedException e){
    e.getMessage();
   }
   thread.interrupt();
   double rr=(double)random/(double)m;
   x=f%13;
   changeR(r,11+(f/7));
   dd[i]=rr;
   if((i>0)&&(dd[i]==dd[i-1])){
    changeR(r,13+(f/11));
    // 防止不動點對程序的影響,當兩個值相同說明程序有可能進入了死胡同,也就是不動點,關于不動點的問題可以參考高等數學關于函數的知識
   }
  }
  double ran=dd[12];
  return ran;
 }

 public static void main(String[] args){
  double rs=getRandom_0_1();
  System.out.println(rs);
 }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 毛片在线播放视频 | 欧美高清另类自拍视频在线看 | 久久资源总站 | 国产精品久久久久久久娇妻 | 久久久久久久久浪潮精品 | 福利在线小视频 | 一级免费大片 | 黄色毛片一级 | 末成年女av片一区二区 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 一区二区久久精品66国产精品 | 国产成人自拍视频在线观看 | 久色精品视频 | 婷婷一区二区三区 | 日本娇小videos高潮 | 日本特级a一片免费观看 | 午夜偷拍视频 | 99视频有精品视频高清 | 中文字幕一区2区 | 精品国产96亚洲一区二区三区 | 美女视频黄视大全视频免费网址 | 桥本有菜免费av一区二区三区 | 国产精品麻豆91 | 午夜视频在线免费观看 | 日本黄色大片免费 | 免费看污视频在线观看 | 91黄瓜视频 | 精品亚洲一区二区三区 | 99爱视频在线观看 | 欧美成人精品一区二区三区 | 91香蕉影视| 欧美亚洲免费 | 日本成人一区二区 | 成人免费一区二区三区视频网站 | 国产精品字幕 | 欧美精品国产综合久久 | 欧美黄一区| 久久人人做 | 老司机免费福利午夜入口ae58 | 一区二区网 | 欧美中文字幕一区二区三区亚洲 |