摘要
偽隨機數在計算機軟件設計中有很廣泛的用途。本文介紹了偽隨機數生成的一般原理,以及利用ASP.NET Framework中提供的Random類及其方法來生成各種不同范圍的滿足各種要求的隨機數。最後結合Web控件表單闡述了ASP.NET中的隨機數在軟件設計中的應用。
關鍵詞
ASP.NET;偽隨機數生成;Web; Random類
隨機數在軟件設計,尤其是在實踐環境模擬和測試等領域中得到很廣泛的應用。為追求真正的隨機序列,人們曾采用很多種原始的物理方法用於生成一定范圍內滿足精度(位數)的均勻分布序列,其缺點在於:速度慢、效率低、需占用大量存儲空間且不可重現等。為滿足計算機模擬研究的需求,人們轉而研究用算法生成模擬各種概率分布的偽隨機序列。偽隨機數是指用數學遞推公式所產生的隨機數。從實用的角度看,獲取這種數的最簡單和最自然的方法是利用計算機語言的函數庫提供的隨機數發生器。不同的開發環境提供的生成隨機數的函數和方法不一樣。典型情況下,它會輸出一個均勻分布在0和1區間內的偽隨機變量的值。
隨機數發生器
在計算機中產生隨機數的方法,經常采用下面的公式:
用這個公式產生0~65536的隨機數a1,a2,…序列的程序,稱為232步長的倍增諧和隨機數發生器。其中b、c、d為正整數,d稱為由公式所產生的隨機序列的種子。
由該公式可以看出,一旦參數b、c、d確定之後,所產生的隨機序列也是確定的。這種只在一定程度上滿足隨機性的序列稱為偽隨機數。
下面是隨機數發生器的一個例子。其中,函數random_seed提供給用戶選擇隨機數的種子,當形式參數d=0時,取系統當前時間作為隨機數種子;當d≠0時,就選用d作為種子;函數random在給定種子的基礎上,計算新的種子,並產生一個范圍為low~high的新的隨機數。
#define MULTIPLIER 0x015A4E35L
#define INCREMENT 1
void random_seed( unsigned long d){
if ( d == 0 )seed = time(0);
else seed = d;}
unsigned int random(unsigned long low,unsigned long high)
{
seed = MULTIPLIER * seed + INCREMENT;
return ((seed >>16 )% ( high-low ) + low );
}
}