青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

標(biāo)準(zhǔn)庫(kù)rand()函數(shù)的缺陷以及Blitz++隨機(jī)數(shù)生成的簡(jiǎn)介

newsuppy, 轉(zhuǎn)載請(qǐng)注明出處)

當(dāng)我們需要在某個(gè)任務(wù)中使用隨機(jī)數(shù),通常我們習(xí)慣于使用標(biāo)準(zhǔn)庫(kù)的rand函數(shù)。像這樣:srand(time(0)); // 時(shí)間種子

??????? rand() % MAX_RAND ;

標(biāo)準(zhǔn)庫(kù)的rand函數(shù)使用線性同余算法,是生成速度相當(dāng)快的一種隨機(jī)數(shù)生成算法。在多數(shù)情況下也確實(shí)能滿足我們的要求,但是對(duì)于一些特殊目的應(yīng)用這個(gè)算法生成的隨機(jī)數(shù)是不行的,比如某些加密算法,蒙特卡羅積分等(在.NET中創(chuàng)建隨機(jī)密碼的加密安全隨機(jī)數(shù)就不能使用Random類的線性同余隨機(jī)數(shù),而要使用System.Security.Cryptography命名空間中的相關(guān)隨機(jī)數(shù)生成類)。

這個(gè)線性同余算法的實(shí)現(xiàn)可以在很多書籍中找到。下面我給出一個(gè)The C Programming Langurage 2nd中的一個(gè)實(shí)現(xiàn),這也是普遍使用的標(biāo)準(zhǔn)庫(kù)隨機(jī)數(shù)算法的實(shí)現(xiàn):

?? unsigned long int next =1;

?

?? /* rand:? return pseudo-random integer on 0..32767 */

? ? int rand(void)

?? {

?????? next = next *1103515245+12345;

?????? return ( unsigned int )(next/65536)%32768;

?? }

?

?? /* srand:? set seed for rand() */

?? void srand(unsignedint seed)

?? {

?????? next = seed;

?? }

?

這個(gè)實(shí)現(xiàn)的問題在于rand函數(shù)return行中的那個(gè)32768,在標(biāo)準(zhǔn)庫(kù)中這個(gè)數(shù)字定義為RAND_MAX宏,在VisualC++Mingw32編譯器的stdlib.h頭文件(或者cstdlib)中你都可以發(fā)現(xiàn)RAND_MAX的值為32768。也就是說這個(gè)算法的隨機(jī)數(shù)分布在0--RAND_MAX中,而在一般編譯器中就是0--32768。假設(shè)你的算法需要的是300000多個(gè)的隨機(jī)數(shù),那么使用rand函數(shù)會(huì)產(chǎn)生重負(fù)次數(shù)近30次的隨機(jī)數(shù)!

所以在這里我將簡(jiǎn)單介紹一下如何使用Blitz++庫(kù)中的隨機(jī)數(shù)生成類。不過在這里我不能夠證明Blitz++隨機(jī)數(shù)算法相對(duì)于標(biāo)準(zhǔn)庫(kù)有什么優(yōu)越性。Blitz++的源代碼是開放的,你可以完全了解它的隨機(jī)數(shù)算法的實(shí)現(xiàn)。

Blitz++中隨機(jī)數(shù)類組織在ranlib namespace中,使用方法也非常簡(jiǎn)單,seed成員函數(shù)種入種子后,再用random成員函數(shù)就可以了。Blitz++中包括了產(chǎn)生各種概率分布情況的隨機(jī)數(shù),列舉如下:均勻分布(Uniform),正態(tài)分布(Normal),指數(shù)分布(Exponential),Beta分布,Gamma分布,Χ方分布,F分布,離散均勻分布。具體地可以參考Blitz++文檔的第九章。本文將會(huì)演示正態(tài)分布的隨機(jī)數(shù)類。

				NormalUnit<>()?? 
				標(biāo)準(zhǔn)正態(tài)分布,
				μ
				 = 0, 
				σ
				 = 1;
				?
		
				Normal<>(T mean, T standardDeviation) 
				正態(tài)分布,N(
				μ
				, 
				σ
				^2
				)
				,其中mean就是
				μ
				,standardDeviation
				就是
				σ
				。
		

Blitz++ 中隨機(jī)數(shù)類的seed是共享的,調(diào)用一個(gè)類的seed后,其他類也同樣種入了相同的種子。對(duì)于種子的來源,Blitz++文檔中有這樣一個(gè)注意事項(xiàng):

Note: you may be tempted to seed the random number generator from a static initializer. Don't do it! Due to an oddity of C++, there is no guarantee on the order of static initialization when templates are involved. Hence, you may seed the RNG before its constructor is invoked, in which case your program will crash. If you don't know what a static initializer is, don't worry -- you're safe!

(幸運(yùn)的是我也不太清楚static initializer具體指什么,:- )

1 ,先來看一個(gè)標(biāo)準(zhǔn)正態(tài)分布的例子,根據(jù)3 σ 法則(正態(tài)分布的隨機(jī)數(shù)幾乎全部落在( μ -3 σ , μ +3 σ ) ),這些隨機(jī)數(shù)應(yīng)該大部分落在(-3, 3)之間。

下面的程序產(chǎn)生10000個(gè)正態(tài)分布隨機(jī)數(shù),然后導(dǎo)入Matlab生成圖形,橫坐標(biāo)是隨機(jī)數(shù)的序數(shù),縱坐標(biāo)是隨機(jī)數(shù)值。很顯然,大部分點(diǎn)在3 σ區(qū)間內(nèi)。在區(qū)間 ( μ - σ , μ + σ)中數(shù)據(jù)點(diǎn)最密。

#include <random/uniform.h>

#include <random/normal.h>

#include <iostream>

#include <fstream>

#include <ctime>

#include <cstdlib>

using namespace std;

using namespace ranlib;

?

int main()

{

??? const size_t MAXGEN =10000;

??? NormalUnit<float> rnd;

?

??? rnd.seed(time(0));

?

??? ofstream file("c:\\file.txt");

?

??? // generator Normal distribution random number

??? for (size_t i=0; i<MAXGEN;++i)

??? {

??????? file << rnd.random()<<" ";

??? }

}

2 下面是一個(gè)服從于 μ= 10,σ= 2的正態(tài)分布,根據(jù)3σ法則,大部分點(diǎn)應(yīng)該落在(4,16)之間。

#include <random/uniform.h>

#include <random/normal.h>

#include <iostream>

#include <fstream>

#include <ctime>

#include <cstdlib>

using namespace std;

using namespace ranlib;

?

int main()

{

??? const size_t MAXGEN =1000000;

??? const int mu =10;

??? const int sigma =2;

??? Normal < float > rnd(mu,sigma);

?

??? rnd.seed(time(0));

?

??? ofstream file("c:\\file.txt");

?

??? // generator Normal distribution random number

??? for (size_t i=0; i<MAXGEN;++i)

??? {

?? ?????file << rnd.random()<<" ";

??? }

}

?

3,生成前述正態(tài)分布的鐘型曲線(PDF)。

這里產(chǎn)生1M的float隨機(jī)數(shù),然后乘以10轉(zhuǎn)型為整數(shù),統(tǒng)計(jì)在區(qū)間0-170之間隨機(jī)數(shù)出現(xiàn)的概率,這樣再導(dǎo)入Matlab生成圖形就是一個(gè)近似的正態(tài)分布的鐘型曲線了。

?

?

#include <random/uniform.h>

#include <random/normal.h>

#include <iostream>

#include <fstream>

#include <ctime>

#include <cstdlib>

using namespace std;

using namespace ranlib;

?

int main()

{

??? const size_t MAXGEN =1000000;

??? const int mu =10;

??? const int sigma =2;

??? Normal < float > rnd(mu,sigma);

?

??? rnd.seed(time(0));

?

??? ofstream file("c:\\file.txt");

?

??? float *rndArray =newfloat[MAXGEN];

??? // generator Normal distribution random number

??? for (size_t i=0; i<MAXGEN;++i)

??? {

??????? rndArray[i]= rnd.random();

??? }

?

??? int *rndConvertIntArray =newint[MAXGEN];

??? int multiple =10;

??? // convert float random number to integer

??? for (size_t i=0; i<MAXGEN;++i)

??? {

??????? rndConvertIntArray[i]=int(rndArray[i]* multiple);

??? }

?

??? const size_t PDFSIZE =(mu +3* sigma)* multiple;

??? const size_t redundancy =10;

??? int *pdf =newint[PDFSIZE+redundancy];

??? for (size_t i=0; i<PDFSIZE+redundancy;++i)

??? {

??????? pdf[i]=0;

??? }

?

??? // generator PDF(Probability Distribution Function), Normal distribution is a "bell" shape

??? for (size_t i=0; i<MAXGEN;++i)

??? {

?? ????? if (rndConvertIntArray[i]<= PDFSIZE+redundancy-1)

??????? {

??????????? ++pdf[rndConvertIntArray[i]];

??????? }

??? }

?

??? for (size_t i=0; i<PDFSIZE+redundancy;++i)

??? {

??????? file << pdf[i]? <<" ";

??? }

?

??? delete [] rndArray;

??? delete [] rndConvertIntArray;

??? delete [] pdf;

}

?

鐘型曲線,當(dāng)然不是特別光滑 ( J ), 大部分隨機(jī)數(shù)都出現(xiàn)在( 4 , 16 )區(qū)間內(nèi)。

?

總結(jié), Blitz++ 的隨機(jī)數(shù)生成類應(yīng)該說是值得信任的。

[ 參考文獻(xiàn) ]

1,? 概率論與數(shù)理統(tǒng)計(jì)( 3rd ), 浙江大學(xué) 盛驟 謝式千 潘承毅 高等教育出版社

2,? C 數(shù)值算法( 2nd ), [ ] William H. Press, Saul A. Teukolsky, William T. Vetterling,

??????????????????? ?????Brian P. Flannery

????????????????????? 傅祖蕓 趙梅娜 丁巖石 等譯,傅祖蕓 審校

3 Matlab 6.5 的文檔 ??? The MathWorks, Inc.


作者Blog: http://blog.csdn.net/newsuppy/

posted on 2006-07-01 13:27 楊粼波 閱讀(1858) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩二区三区| 久久婷婷影院| 国产精品久久久久久久电影| 欧美激情精品久久久久久蜜臀 | 欧美日韩视频在线一区二区| 欧美sm视频| 老牛嫩草一区二区三区日本| 久久久视频精品| 欧美成人精品激情在线观看| 欧美激情二区三区| 欧美日韩亚洲网| 国产欧美一区二区精品秋霞影院| 国产日韩在线一区二区三区| 伊人精品成人久久综合软件| 亚洲国产导航| 日韩午夜在线观看视频| 亚洲精品在线一区二区| 亚洲一区二区免费看| 久久精品二区三区| 亚洲福利视频一区二区| 麻豆av一区二区三区久久| 亚洲国产精品精华液2区45 | 蜜臀久久99精品久久久画质超高清| 老鸭窝91久久精品色噜噜导演| 欧美区日韩区| 国产色产综合产在线视频| 亚洲精品欧美一区二区三区| 欧美一区二区精品在线| 亚洲国产成人在线播放| 亚洲男人第一av网站| 老司机免费视频一区二区三区| 欧美三日本三级少妇三99| 国内精品久久久久久久影视蜜臀| 日韩网站在线观看| 久久久视频精品| 日韩午夜在线视频| 免费影视亚洲| 国语精品一区| 亚洲一区在线观看免费观看电影高清| 久久夜色精品国产欧美乱极品 | 亚洲人成7777| 久久久午夜视频| 国产精品一区二区黑丝| 亚洲国产清纯| 久久在线免费观看视频| 一区二区不卡在线视频 午夜欧美不卡'| 欧美在线1区| 国产精品久久97| 亚洲精品影视在线观看| 鲁大师成人一区二区三区 | 亚洲三级影片| 久久精品国产一区二区电影| 国产精品久久网站| 中文精品99久久国产香蕉| 欧美国产乱视频| 久久精品国产91精品亚洲| 国产精品免费一区二区三区在线观看 | 欧美超级免费视 在线| 国产一区二区三区四区在线观看 | 亚洲图片欧美午夜| 欧美日韩国产二区| 99精品视频免费观看视频| 欧美黑人在线观看| 麻豆亚洲精品| 亚洲欧洲精品一区二区三区波多野1战4| 久久久蜜桃精品| 久久精品国产亚洲a| 国产偷久久久精品专区| 久久国产精品电影| 久久爱www.| 在线看无码的免费网站| 牛牛影视久久网| 欧美黄色免费| 日韩亚洲欧美一区二区三区| 亚洲人体一区| 欧美日韩小视频| 亚洲在线不卡| 午夜久久久久久| 激情综合激情| 亚洲国产精品视频| 欧美日韩午夜| 久久九九免费| 免播放器亚洲一区| 99热精品在线| 亚洲欧美国产另类| 在线国产精品一区| 亚洲激情亚洲| 国产精品另类一区| 久久人人97超碰精品888| 欧美+亚洲+精品+三区| 中文有码久久| 久久国产乱子精品免费女| 亚洲第一精品夜夜躁人人躁| 亚洲激情视频| 韩国精品久久久999| 亚洲区国产区| 午夜日韩激情| 久久精品久久99精品久久| 亚洲精品久久久久久一区二区| 日韩视频国产视频| 国外成人性视频| 亚洲日本一区二区| 国产区亚洲区欧美区| 亚洲国产高清aⅴ视频| 国产精品草莓在线免费观看| 久久一区欧美| 国产精品久久久久久久久婷婷 | 夜色激情一区二区| 狠狠色综合一区二区| 亚洲精品视频在线观看免费| 国产一区二区三区免费观看 | 女女同性精品视频| 国产精品成人一区二区| 嫩草成人www欧美| 国产精品美女久久| 91久久精品国产91久久| 国产一区二区精品丝袜| 一本久道久久综合婷婷鲸鱼| 一区在线观看| 欧美一区二区在线视频| 亚洲专区在线| 欧美日韩免费观看一区二区三区| 免费不卡在线观看| 国产视频亚洲精品| 亚洲天堂成人在线视频| 99视频国产精品免费观看| 久久久久久穴| 久久琪琪电影院| 国内精品嫩模av私拍在线观看| 亚洲午夜免费福利视频| 中国日韩欧美久久久久久久久| 蜜桃视频一区| 亚洲电影观看| 亚洲国产欧美日韩| 玖玖视频精品| 暖暖成人免费视频| 在线观看亚洲一区| 久久综合九色综合欧美就去吻 | 99热免费精品| 欧美极品aⅴ影院| 亚洲国产一区在线观看| 亚洲国产精品久久久久久女王| 久久精品成人一区二区三区| 麻豆91精品| 亚洲国产精品专区久久| 久久网站免费| 亚洲高清免费在线| 亚洲精品在线免费观看视频| 欧美激情一区二区三区在线视频观看 | 久久国产精品久久w女人spa| 国产精品日韩欧美一区二区三区| 欧美日韩黄视频| 亚洲大黄网站| 99精品国产在热久久婷婷| 欧美精品一区三区在线观看| 亚洲国产三级在线| 国产精品99久久99久久久二8| 欧美午夜不卡在线观看免费| 亚洲欧美不卡| 你懂的一区二区| 亚洲午夜女主播在线直播| 国产精品乱码妇女bbbb| 午夜精品理论片| 免费在线成人av| 一区二区三区av| 国产欧美一区二区精品婷婷 | 久久久久久9999| 亚洲国产成人在线| 午夜精品久久久久久久99黑人 | 久久成人精品| 亚洲国产第一页| 欧美性大战xxxxx久久久| 欧美伊人久久久久久久久影院 | 亚洲日本理论电影| 欧美日韩亚洲在线| 欧美永久精品| 日韩一级免费观看| 久久久久久久网| 一区二区三区四区国产精品| 国产亚洲一区在线播放| 欧美电影美腿模特1979在线看| 亚洲色图自拍| 欧美激情一区二区三区在线视频观看| 亚洲深夜福利| 亚洲国产一区视频| 国产精品久线观看视频| 欧美va亚洲va国产综合| 亚洲欧美日韩国产| 亚洲人成人一区二区在线观看| 久久不射中文字幕| 一区二区欧美精品| 在线观看国产精品网站| 国产精品美女久久久免费| 免费影视亚洲| 久久婷婷久久| 久久精品一区二区三区四区| 一区二区三区蜜桃网| 亚洲国产午夜| 欧美国产视频在线| 久久综合网hezyo|