国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

PH_P的偽隨機(jī)數(shù)與真隨機(jī)數(shù)詳解

2019-11-02 15:01:21
字體:
供稿:網(wǎng)友

   這篇文章主要介紹了PHP的偽隨機(jī)數(shù)與真隨機(jī)數(shù)詳解,本文首先講解了真隨機(jī)數(shù)和偽隨機(jī)數(shù)的相關(guān)概念,并給出了比用mt_rand()函數(shù)產(chǎn)生更好的偽隨機(jī)數(shù)的一段例子代碼,需要的朋友可以參考下

  首先需要聲明的是,計(jì)算機(jī)不會(huì)產(chǎn)生絕對(duì)隨機(jī)的隨機(jī)數(shù),計(jì)算機(jī)只能產(chǎn)生“偽隨機(jī)數(shù)”。其實(shí)絕對(duì)隨機(jī)的隨機(jī)數(shù)只是一種理想的隨機(jī)數(shù),即使計(jì)算機(jī)怎樣發(fā)展,它也不會(huì)產(chǎn)生一串絕對(duì)隨機(jī)的隨機(jī)數(shù)。計(jì)算機(jī)只能生成相對(duì)的隨機(jī)數(shù),即偽隨機(jī)數(shù)。

  偽隨機(jī)數(shù)并不是假隨機(jī)數(shù),這里的“偽”是有規(guī)律的意思,就是計(jì)算機(jī)產(chǎn)生的偽隨機(jī)數(shù)既是隨機(jī)的又是有規(guī)律的。怎樣理解呢?產(chǎn)生的偽隨機(jī)數(shù)有時(shí)遵守一定的規(guī)律,有時(shí)不遵守任何規(guī)律;偽隨機(jī)數(shù)有一部分遵守一定的規(guī)律;另一部分不遵守任何規(guī)律。比如“世上沒有兩片形狀完全相同的樹葉”,這正是點(diǎn)到了事物的特性,即隨機(jī)性,但是每種樹的葉子都有近似的形狀,這正是事物的共性,即規(guī)律性。從這個(gè)角度講,你大概就會(huì)接受這樣的事實(shí)了:計(jì)算機(jī)只能產(chǎn)生偽隨機(jī)數(shù)而不能產(chǎn)生絕對(duì)隨機(jī)的隨機(jī)數(shù)。

  首先來了解一下真隨機(jī)數(shù)和偽隨機(jī)數(shù)的概念。

  真隨機(jī)數(shù)發(fā)生器:英文為:true random number generators ,簡(jiǎn)稱為:TRNGs,是利用不可預(yù)知的物理方式來產(chǎn)生的隨機(jī)數(shù)。

  偽隨機(jī)數(shù)發(fā)生器:英文為:pseudo-random number generators ,簡(jiǎn)稱為:PRNGs,是計(jì)算機(jī)利用一定的算法來產(chǎn)生的。

  對(duì)比一下兩種辦法產(chǎn)生的隨機(jī)數(shù)的圖片。

  Random.org(利用大氣噪音來生成隨機(jī)數(shù),而大氣噪音是空氣中的雷暴所產(chǎn)生的 )生成的隨機(jī)位圖:

  Windows下PHP的rand()函數(shù)產(chǎn)生的隨機(jī)圖片:

  很顯然,后者偽隨機(jī)數(shù)發(fā)生器產(chǎn)生的圖片有這明顯的條紋。

  利用php的rand隨機(jī)函數(shù)產(chǎn)生這張圖片的代碼為:

   代碼如下:

  //需要開啟gd庫

  header("Content-type: image/png");

  $im = imagecreatetruecolor(512, 512)

  or die("Cannot Initialize new GD image stream");

  $white = imagecolorallocate($im, 255, 255, 255);

  for ($y=0; $y<512; $y++) {

  for ($x=0; $x<512; $x++) {

  if (rand(0,1) === 1) {

  imagesetpixel($im, $x, $y, $white);

  }

  }

  }

  imagepng($im);

  imagedestroy($im);

  實(shí)際上也并不是所有的偽隨機(jī)數(shù)發(fā)生器(PRNGs)效果都這么差的,只是恰好在Windows下的PHP的rand(

中國(guó)歷史[www.9-39.com/html/china/]
)函數(shù)是這樣。如果是在Linux下 測(cè)試相同的代碼的話,所產(chǎn)生的圖片也看不出明顯的條紋。在Windows下如果用mt_rand()函數(shù)替代rand()函數(shù)的話效果也會(huì)好很多。這是由 于mt_rand()用了Mersenne Twister(馬其塞旋轉(zhuǎn))算法來產(chǎn)生隨機(jī)數(shù)。PHP的文檔還說:mt_rand() 可以產(chǎn)生隨機(jī)數(shù)值的平均速度比 libc 提供的 rand() 快四倍。

  另外,Linux內(nèi)核(1.3.30以上)包括了一個(gè)隨機(jī)數(shù)發(fā)生器/dev/random ,對(duì)于很多安全目的是足夠的。

  下面是關(guān)于Linux的隨機(jī)數(shù)發(fā)生器的原理介紹 :

  Linux 操作系統(tǒng)提供本質(zhì)上隨機(jī)(或者至少具有強(qiáng)烈隨機(jī)性的部件)的庫數(shù)據(jù)。這些數(shù)據(jù)通常來自于設(shè)備驅(qū)動(dòng)程序。例如,鍵盤驅(qū)動(dòng)程序收集兩個(gè)按鍵之間時(shí)間的信息,然后將這個(gè)環(huán)境噪聲填入隨機(jī)數(shù)發(fā)生器庫。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 潮州市| 稻城县| 佛冈县| 冀州市| 江源县| 建水县| 嘉义县| 锡林郭勒盟| 安图县| 扎囊县| 新泰市| 德格县| 左云县| 开阳县| 会理县| 麟游县| 平塘县| 外汇| 探索| 崇明县| 抚远县| 井陉县| 巴南区| 吉林市| 昆山市| 桃园市| 阿城市| 孝昌县| 城固县| 双峰县| 甘谷县| 瓦房店市| 台北市| 东乡县| 商丘市| 垫江县| 申扎县| 大余县| 凌源市| 洛川县| 太原市|