文章編號: 231847 - 上次校閱: 2004年6月24日 - 版次: 3.0

資訊: 如何 Visual Basic 產生亂數 RND 函式

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

RND 函式,在 Visual Basic 會產生亂數根據到特定的演算法。對於某些科學或統計研究它可能是一定要了解如何產生這些數字。本文所用的演算法。

完整 treatise 統計這個演算法的本質上是本文的討論範圍內,但廣泛科學文獻中將討論主題。

其他相關資訊

Microsoft Visual Basic 會使用線性 congruential 方法供 RND 函式中的虛擬隨機數字產生。下列虛擬程式碼文件所用的演算法:
   x1 = ( x0 * a + c ) MOD (2^24)
				
位置:

x 1 = 新的值
x 0 = (一個初始值 327680 用由 Visual Basic) 的前一個值
一個 = 1140671485
c = 12820163

上述公式中的,'MOD' 運算子會傳回整數除法之後的整數餘數。

運算式 x1/(2^24) 然後會傳回浮點數值介於 0.0 到 RND 函式所傳回的 1.0 之間。

請注意上述的演算法無法在一種可以重製 RND 函式所產生的隨機數字序列的 Visual Basic 程式碼中實作。這是因為 Visual Basic 在內部使用 Visual Basic 程式語言不支援的不帶正負號的 Long 資料類型。

下列的 C/C + + 程式碼可用來產生前十個 Visual Basic 會產生的虛擬隨機號碼:
#include "stdafx.h"

int main(int argc, char* argv[])
{
unsigned long       rndVal;

rndVal = 0x50000L;
int i;
float rndFloat;

for (i=0;i<10;i++)
	{
	rndVal = (rndVal * 0x43fd43fdL + 0xc39ec3L) & 0xffffffL;
	rndFloat = (float)rndVal / (float)16777216.0;
	printf("Value is %.15f\n",rndFloat);
	}
return 0;
}
				
筆記,預設情況下,的 Rnd() 函數會傳回相同的虛擬隨機順序數字每次程式執行。這可能會基於某些目的 (例如統計研究重複性所需的位置) 是適當的。對於其他類型的遊戲,這類應用程式有這可能是無法適當的。如果不同的順序是必要的使用 Randomize 陳述式之前,Rnd() 第一次呼叫。這將會藉由使用系統計時器初始化隨機數字的種子。如果不同的組合是必要的但是必須在將來可重複,使用語法 Randomize X 其中 X 是某些特定的數字值。

重要辨識 Rnd() 傳回為每個元件,它用新的順序 ; 也就是如果您主要 EXE 產生一個序列,並使用 Visual Basic ActiveX DLL 也產生序列,這些序列是彼此獨立。

?考

如需詳細的相關資訊,較早版本的 Microsoft Basic 產生虛擬隨機數字請按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
28150? (http://support.microsoft.com/kb/28150/EN-US/ ) 用來產生隨機數字 RND 和 RANDOMIZE 替代方案
在網際網路上及發行有關數值演算法的文字,您可以找到各種數值的演算法,用來產生虛擬隨機數字序列。

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 1.0 Standard Edition
  • Microsoft Visual Basic 2.0 Standard Edition
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 2.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
關鍵字:?
kbmt kbinfo KB231847 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:231847? (http://support.microsoft.com/kb/231847/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。