最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年01月11日 09:36:32   作者:  
不調(diào)用Math.random方法產(chǎn)生自己的隨機(jī)數(shù),現(xiàn)代計(jì)算機(jī)運(yùn)行速度很快,在主線(xiàn)程等待一定毫秒數(shù)時(shí),其他線(xiàn)程就會(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è)線(xiàn)程繼續(xù)執(zhí)行與上一個(gè)線(xiàn)程相同的run方法時(shí),其初始值是上一個(gè)線(xiàn)程執(zhí)行后的值,這形成了經(jīng)典的蝴蝶效應(yīng),通過(guò)將這個(gè)差異放大,導(dǎo)致最終隨機(jī)數(shù)的產(chǎn)生。
在這個(gè)程序中,一共開(kāi)啟了13個(gè)thread線(xiàn)程,每一次都會(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);
 }
}

相關(guān)文章

  • Java程序設(shè)計(jì)之12個(gè)經(jīng)典樣例

    Java程序設(shè)計(jì)之12個(gè)經(jīng)典樣例

    這篇文章主要給大家分享關(guān)于Java程序設(shè)計(jì)11個(gè)經(jīng)典樣例,主要以舉例的形式詳細(xì)的講解了Java程序設(shè)計(jì)的各種方法,需要的朋友可以參考一下文章具體的內(nèi)容
    2021-10-10
  • 一文詳解gRPC快速整合SpringCloud

    一文詳解gRPC快速整合SpringCloud

    這篇文章主要為大家介紹gRPC快速整合SpringCloud的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Java后端產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能的實(shí)現(xiàn)代碼

    Java后端產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java后臺(tái)產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能,本文文字結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Java AbstractMethodError原因案例詳解

    Java AbstractMethodError原因案例詳解

    這篇文章主要介紹了Java AbstractMethodError原因案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 軟件開(kāi)發(fā)七大過(guò)程模型

    軟件開(kāi)發(fā)七大過(guò)程模型

    這篇文章主要介紹了Java七大過(guò)程模型詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 從java源碼分析線(xiàn)程池(池化技術(shù))的實(shí)現(xiàn)原理

    從java源碼分析線(xiàn)程池(池化技術(shù))的實(shí)現(xiàn)原理

    這篇文章主要介紹了從java源碼分析線(xiàn)程池(池化技術(shù))的實(shí)現(xiàn)原理,池化技術(shù)是一種編程技巧,當(dāng)程序出現(xiàn)高并發(fā)時(shí),能夠明顯的優(yōu)化程序,降低系統(tǒng)頻繁創(chuàng)建銷(xiāo)毀連接等額外開(kāi)銷(xiāo),下文更多的相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • 使用Java和SpringBoot實(shí)現(xiàn)服務(wù)器發(fā)送事件(Server-Sent Events)

    使用Java和SpringBoot實(shí)現(xiàn)服務(wù)器發(fā)送事件(Server-Sent Events)

    使用Java開(kāi)發(fā)web應(yīng)用,大多數(shù)時(shí)候我們提供的接口返回?cái)?shù)據(jù)都是一次性完整返回,有些時(shí)候,我們也需要提供流式接口持續(xù)寫(xiě)出數(shù)據(jù),以下提供一種簡(jiǎn)單的方式,本文給大家介紹了如何在Java web中實(shí)現(xiàn)服務(wù)器發(fā)送事件,需要的朋友可以參考下
    2024-02-02
  • spring boot 中設(shè)置默認(rèn)網(wǎng)頁(yè)的方法

    spring boot 中設(shè)置默認(rèn)網(wǎng)頁(yè)的方法

    這篇文章主要介紹了spring boot 中設(shè)置默認(rèn)網(wǎng)頁(yè)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Spring框架對(duì)于Bean的管理詳解

    Spring框架對(duì)于Bean的管理詳解

    在實(shí)際開(kāi)發(fā)中,我們往往要用到Spring容器為我們提供的諸多資源,例如想要獲取到容器中的配置、獲取到容器中的Bean等等。本文為大家詳細(xì)講講工具類(lèi)如何獲取到Spring容器中的Bean,需要的可以參考一下
    2022-07-07
  • Spark Streaming算子開(kāi)發(fā)實(shí)例

    Spark Streaming算子開(kāi)發(fā)實(shí)例

    這篇文章主要介紹了Spark Streaming算子開(kāi)發(fā)實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

芜湖县| 两当县| 大兴区| 武清区| 广汉市| 和静县| 昌邑市| 揭西县| 扬中市| 屏南县| 祁门县| 海盐县| 四会市| 涞源县| 和田县| 彩票| 新平| 南华县| 大英县| 郯城县| 临澧县| 辽宁省| 哈密市| 宜城市| 鄂州市| 枣强县| 田林县| 许昌市| 永城市| 抚松县| 岳阳县| 哈巴河县| 饶阳县| 马尔康县| 永吉县| 长葛市| 贡嘎县| 巴彦淖尔市| 和硕县| 昌图县| 南昌市|