国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

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

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 不使用Math.random方法生成隨機(jī)數(shù)(隨機(jī)數(shù)生成器)

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

2019-10-30 17:03java教程網(wǎng) JAVA教程

不調(diào)用Math.random方法產(chǎn)生自己的隨機(jī)數(shù),現(xiàn)代計(jì)算機(jī)運(yùn)行速度很快,在主線程等待一定毫秒數(shù)時(shí),其他線程就會(huì)執(zhí)行run方法中的while循環(huán),一般會(huì)執(zhí)行數(shù)十萬(wàn)次

由于一些不可控因素的影響,比如系統(tǒng)內(nèi)存,計(jì)算機(jī)狀態(tài)等,每一次在while循環(huán)中執(zhí)行的次數(shù)會(huì)有一定差異
大概幾百次。這就導(dǎo)致了結(jié)果的差異。
注意這個(gè)程序使用了許多靜態(tài)變量,也就是說(shuō),在下一個(gè)線程繼續(xù)執(zhí)行與上一個(gè)線程相同的run方法時(shí),其初始值是上一個(gè)線程執(zhí)行后的值,這形成了經(jīng)典的蝴蝶效應(yīng),通過(guò)將這個(gè)差異放大,導(dǎo)致最終隨機(jī)數(shù)的產(chǎn)生。
在這個(gè)程序中,一共開(kāi)啟了13個(gè)thread線程,每一次都會(huì)將那幾個(gè)靜態(tài)變量的值向混亂的方向推動(dòng),
于是最后得到的數(shù)組double[] bb的混亂程度幾何上升,
最開(kāi)始的bb[0]只有約幾百個(gè)可能的值,而到了bb[3]就可以是65536個(gè)數(shù)據(jù)中的任何一個(gè)。
為了做到隨機(jī),我循環(huán)了13次,bb[12]幾乎可以說(shuō)是絕對(duì)的隨機(jī)了。

 

復(fù)制代碼代碼如下:


/**
 * 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個(gè)數(shù)按照一定順序存入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){
                //對(duì)r[]進(jìn)行移動(dòng)
  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));
                                //防止不動(dòng)點(diǎn)對(duì)程序的影響,當(dāng)兩個(gè)值相同說(shuō)明程序有可能進(jìn)入了死胡同,也就是不動(dòng)點(diǎn),關(guān)于不動(dòng)點(diǎn)的問(wèn)題可以參考高等數(shù)學(xué)關(guān)于函數(shù)的知識(shí)
   }
  }
  double ran=dd[12];
  return ran;
 }

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

 

MyRandom.java

 

復(fù)制代碼代碼如下:


?/**
 * 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個(gè)數(shù)按照一定順序存入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));
    // 防止不動(dòng)點(diǎn)對(duì)程序的影響,當(dāng)兩個(gè)值相同說(shuō)明程序有可能進(jìn)入了死胡同,也就是不動(dòng)點(diǎn),關(guān)于不動(dòng)點(diǎn)的問(wèn)題可以參考高等數(shù)學(xué)關(guān)于函數(shù)的知識(shí)
   }
  }
  double ran=dd[12];
  return ran;
 }

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

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲成人av在线 | 国产黄色免费网站 | 伊人网在线视频观看 | 亚洲日韩中文字幕一区 | 久久黄色网 | 日本视频免费 | 日韩在线中文字幕 | 亚洲精品国产a久久久久久 中文字幕在线第一页 | 国产欧美在线 | 久久久久久av | 国产精品一码二码三码在线 | 精品香蕉一区二区三区 | 国产午夜久久 | 香蕉久久一区二区不卡无毒影院 | 久久久久久久一区 | 日韩精品一区在线视频 | 免费成人福利视频 | 国产99久久精品 | 色综合天天综合网国产成人综合天 | 亚洲精品一区二区三区蜜桃久 | 一区二区三区 在线 | 一级毛片免费完整视频 | 欧美日韩在线免费观看 | 毛片一级av| 国产精品视频入口 | 国产在线一区二区三区 | 日本亚洲最大的色成网站www | 国产欧美在线观看 | 日韩视频免费 | 日韩在线播放一区二区三区 | 久久久久国产精品一区二区 | 久久久精品一区二区 | 国产高清av在线一区二区三区 | 黄色一级大片在线免费看产 | 国产黄色在线观看 | 国产精品久久久久久久久久久新郎 | 偷拍自拍第一页 | 动漫精品一区二区三区 | 日韩电影在线看 | 中文字幕日韩一区二区不卡 | 99精品视频在线观看 |