The Wayback Machine - https://web.archive.org/web/20110311082626/http://support.microsoft.com:80/kb/231847/nl
Artikel ID: 231847 - Laatste beoordeling: zondag 27 februari 2011 - Wijziging: 2.0

INFO: Hoe Visual Basic die genereert pseudo-willekeurige getallen voor de functie RND

Samenvatting

De functie RND in Visual Basic pseudo-willekeurige nummers volgens een bepaald algoritme gegenereerd. Voor bepaalde wetenschappelijke en statistische studies kan zijn belangrijk om te begrijpen hoe deze getallen worden gegenereerd. In dit artikel wordt het algoritme dat wordt gebruikt.

Een volledige verhandeling over de statistische aard van dit algoritme valt buiten het bestek van dit artikel, maar het onderwerp is veel besproken in de wetenschappelijke literatuur.

Meer informatie

Microsoft Visual Basic wordt de lineaire congruential methode voor het genereren van pseudo-willekeurige getal in de functie RND. De volgende pseudocode worden de algoritme:
   x1 = ( x0 * a + c ) MOD (2^24)
				
waar:

x 1 = nieuwe waarde
X0 = vorige waarde (een aanvankelijke waarde van 327680 wordt gebruikt door Visual Basic)
een = 1140671485
c = 12820163

De operator "MOD" in de bovenstaande formule retourneert het geheel na een integer delen.

De x1/(2^24) expressie retourneert vervolgens de drijvende komma tussen 0,0 en 1,0 die wordt geretourneerd door de functie RND.

Houd er rekening mee dat het bovenstaande algoritme kan niet worden geïmplementeerd in Visual Basic-code op zodanige wijze dat de random nummer reeks die is gegenereerd door de functie RND kan worden gereproduceerd. Dit is omdat Visual Basic gebruikt intern een niet-ondertekende long gegevenstype dat niet wordt ondersteund door de Visual Basic-taal.

De volgende C/C++-code kan worden gebruikt voor het genereren van de eerste tien pseudo-willekeurige getallen die Visual Basic die genereert:
#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;
}
				
Houd er rekening mee dat standaard wordt de functie Rnd () retourneert dezelfde reeks van pseudo-willekeurige getallen telkens wanneer die het programma wordt uitgevoerd. Dit kan nodig zijn voor sommige doeleinden (zoals statistische studies waar herhaalbaarheid vereist is). Voor andere soorten toepassingen, zoals spelletjes, dit mogelijk niet geschikt. Als een andere volg orde vereist is, gebruikt u de instructie Randomize voorafgaand aan de eerste aanroep van Rnd (). Dit zal het willekeurige zaad getal initialiseren met behulp van de systeemtimer. Als een andere volg orde vereist is, maar herhaald in de toekomst worden moet, gebruikt u de syntaxis Randomize X waarbij x staat voor een specifieke numerieke waarde.

Het is belangrijk te onderkennen dat Rnd () een nieuwe reeks voor elk onderdeel waarin het wordt gebruikt retourneert; dat wil zeggen, als uw hoofd EXE een reeks genereert en een ActiveX-DLL van Visual Basic gebruikt ook een reeks genereren, deze combinaties zijn onafhankelijk van elkaar.

Referenties

Eerdere versies van Microsoft Basic voor meer informatie over het genereren van pseudo-willekeurige getallen, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
28150  (http://support.microsoft.com/kb/28150/EN-US/ ) RND en RANDOMIZE alternatieven voor het genereren van willekeurige getallen
Diverse numerieke algoritmen voor het genereren van pseudo-willekeurige nummer reeksen kunnen u vinden op Internet en in gepubliceerde teksten betreffende numerieke algoritmen.

De informatie in dit artikel is van toepassing op:
  • 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 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Trefwoorden: 
kbinfo kbmt KB231847 KbMtnl
Machine-translated ArticleMachine-translated Article
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:231847  (http://support.microsoft.com/kb/231847/en-us/ )