隨機數在軟件設計,尤其是在實踐環境模擬和測試等領域中得到很廣泛的應用。為追求真正的隨機序列,人們曾采用很多種原始的物理方法用于生成一定范圍內滿足精度(位數)的均勻分布序列,其缺點在于:速度慢、效率低、需占用大量存儲空間且不可重現等。為滿足計算機模擬研究的需求,人們轉而研究用算法生成模擬各種概率分布的偽隨機序列。偽隨機數是指用數學遞推公式所產生的隨機數。從實用的角度看,獲取這種數的最簡單和最自然的方法是利用計算機語言的函數庫提供的隨機數發生器。不同的開發環境提供的生成隨機數的函數和方法不一樣。典型情況下,它會輸出一個均勻分布在0和1區間內的偽隨機變量的值。
隨機數發生器
在計算機中產生隨機數的方法,經常采用下面的公式:

用這個公式產生0~65536的隨機數a1,a2,…序列的程序,稱為232步長的倍增諧和隨機數發生器。其中b、c、d為正整數,d稱為由公式所產生的隨機序列的種子。
由該公式可以看出,一旦參數b、c、d確定之后,所產生的隨機序列也是確定的。這種只在一定程度上滿足隨機性的序列稱為偽隨機數。
下面是隨機數發生器的一個例子。其中,函數random_seed提供給用戶選擇隨機數的種子,當形式參數d=0時,取系統當前時間作為隨機數種子;當d≠0時,就選用d作為種子;函數random在給定種子的基礎上,計算新的種子,并產生一個范圍為low~high的新的隨機數。
ASP.NET中偽隨機數生成機制
計算機不可能產生完全隨機的數字。所謂的隨機數發生器都是通過一定的算法對事先選定的隨機種子做復雜的運算,用產生的結果來近似的模擬完全隨機數,這種隨機數被稱作偽隨機數。偽隨機數是以相同的概率從一組有限的數字中選取的。所選數字并不具有完全的隨機性,但是從實用的角度而言,其隨機程度已足夠了。
1、VB.NET內建函數
ASP.NET程序可以采用多種編程語言,其默認的程序語言是VB.net,雖然VB.NET和VB有些相似,但它們的應用環境不一樣,編寫代碼的方法也有所不同。在VB.NET中,如果要使用數學函數,必須通過.NET Framework提供的Math類,它位于System命名空間下,用戶可以在代碼頂部添加Imports System. Math以便使用這些數學函數。
其中用于產生隨機數的函數原型為:Rnd(x),該函數用以產生一個介于0~1之間的單精度隨機數。x是產生隨機數的種子。如果要從(min, max)這個范圍內隨機抽取一個數,此時需要用到公式:隨機數 = (max - min) * Rnd(x) + min。
偽隨機數的選擇是從隨機種子開始的,為了保證每次得到的偽隨機數都足夠地“隨機”,隨機種子的選擇就顯得非常重要。如果選擇的隨機種子一樣則生成的隨機序列也相同。一般地,使用同系統時間有關的參數作為隨機種子,這也是.net Framework中的隨機數發生器默認采用的方法。
2、隨機數類System.Random
隨機數類System.Random類提供以下方法用于產生各種滿足不同要求的隨機數,如表1所示:
表1 System.Random類提供的各種方法
使用隨機數類System.Random必須先聲明。如果要使用Nextbytes(byte())方法,在使用前也必須聲明字節數組。
3、測試程序編寫
在運行ASP.NET程序前必須建立其開發運行環境,包括配置Microsoft IIS和安裝.NET Framework SDK以及機MSE編輯器。MSE編輯器是Microsoft Office的一個附加軟件,作為ASP.NET的編輯工具非常方便。測試程序代碼如下:
隨機數發生器
在計算機中產生隨機數的方法,經常采用下面的公式:

用這個公式產生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 ); } } |
ASP.NET中偽隨機數生成機制
計算機不可能產生完全隨機的數字。所謂的隨機數發生器都是通過一定的算法對事先選定的隨機種子做復雜的運算,用產生的結果來近似的模擬完全隨機數,這種隨機數被稱作偽隨機數。偽隨機數是以相同的概率從一組有限的數字中選取的。所選數字并不具有完全的隨機性,但是從實用的角度而言,其隨機程度已足夠了。
1、VB.NET內建函數
ASP.NET程序可以采用多種編程語言,其默認的程序語言是VB.net,雖然VB.NET和VB有些相似,但它們的應用環境不一樣,編寫代碼的方法也有所不同。在VB.NET中,如果要使用數學函數,必須通過.NET Framework提供的Math類,它位于System命名空間下,用戶可以在代碼頂部添加Imports System. Math以便使用這些數學函數。
其中用于產生隨機數的函數原型為:Rnd(x),該函數用以產生一個介于0~1之間的單精度隨機數。x是產生隨機數的種子。如果要從(min, max)這個范圍內隨機抽取一個數,此時需要用到公式:隨機數 = (max - min) * Rnd(x) + min。
偽隨機數的選擇是從隨機種子開始的,為了保證每次得到的偽隨機數都足夠地“隨機”,隨機種子的選擇就顯得非常重要。如果選擇的隨機種子一樣則生成的隨機序列也相同。一般地,使用同系統時間有關的參數作為隨機種子,這也是.net Framework中的隨機數發生器默認采用的方法。
2、隨機數類System.Random
隨機數類System.Random類提供以下方法用于產生各種滿足不同要求的隨機數,如表1所示:
表1 System.Random類提供的各種方法
編號 |
方法名稱 |
功能描述 |
1 |
Next() |
返回一個0~2147483647之間的整數 |
2 |
Next(i) |
返回一個0~i之間的整數 |
3 |
Next(i,j) |
返回一個i~j之間的整數 |
4 |
Nextdouble() |
返回一個0~1之間的隨機小數 |
5 |
Nextdouble( byte()) |
用0~255之間的隨機整數作為字節數組各元素的值。 |
使用隨機數類System.Random必須先聲明。如果要使用Nextbytes(byte())方法,在使用前也必須聲明字節數組。
3、測試程序編寫
在運行ASP.NET程序前必須建立其開發運行環境,包括配置Microsoft IIS和安裝.NET Framework SDK以及機MSE編輯器。MSE編輯器是Microsoft Office的一個附加軟件,作為ASP.NET的編輯工具非常方便。測試程序代碼如下:
<script language="vb" runat="server"> sub page_load(send as object,e as eventargs) dim r1 as random =new random() response.write("The result of r1.next()is:"+r1.next().tostring()) response.write("Theresultofr1.next(100)is:" +r1.next(100).tostring()) response.write("The result of r1.next(100,150) is:"+r1.next(100,150).tostring()) response.write("The result of r1.nextdouble() is:"+r1.nextdouble().tostring()) r1.nextbytes(r) // dim r(300) as byte response.write("the r(100) is:") response.write(r(199)) end sub </script> |
其測試結果如圖1所示:
圖1 偽隨機數測試運行結果