The information in this article applies to:
SUMMARY
The RND function in Visual Basic generates pseudo-random numbers according to a specific algorithm. For certain scientific or statistical studies it might be important to understand how these numbers are generated. This article documents the algorithm used. MORE INFORMATIONMicrosoft Visual Basic uses the linear-congruential method for pseudo-random number generation in the RND function. The following pseudo code documents the algorithm used:
where:x1 = new value x0 = previous value (an initial value of 327680 is used by Visual Basic) a = 1140671485 c = 12820163 The 'MOD' operator in the formula above returns the integer remainder after an integer division. The expression x1/(2^24) will then return the floating-point number between 0.0 and 1.0 that is returned by the RND function. Note that the above algorithm cannot be implemented in Visual Basic code in such a way that the random number sequence generated by the RND function can be reproduced. This is because internally Visual Basic uses an unsigned long data type that is not supported by the Visual Basic language. The following C/C++ code can be used to generate the first ten pseudo-random numbers that Visual Basic generates:
Note that, by default, the Rnd() function will return the same sequence of pseudo-random numbers each time the program is run. For some purposes (such as statistical studies where repeatability is required) this may be appropriate. For other types of applications, such as games, this may not be appropriate. If a different sequence is required, use the Randomize statement prior to the first call to Rnd(). This will initialize the random number seed by using the system timer. If a different sequence is required but must be repeatable in future, use the syntax Randomize X where X is some specific numeric value.
It is important to recognize that Rnd() returns a new sequence for each component in which it is used; that is, if your main EXE generates one sequence and uses a Visual Basic ActiveX DLL to generate a sequence also, these sequences are independent of one another. REFERENCESFor additional information about how earlier versions of Microsoft Basic generate pseudo-random numbers, please click the article number below to view the article in the Microsoft Knowledge Base: Q28150 RND and RANDOMIZE Alternatives for Generating Random NumbersVarious numerical algorithms for generating pseudo-random number sequences can be found on the Internet and in published texts concerning numerical algorithms. Additional query words: random algorithm statistical sequence pseudo
Keywords : kbVBp kbVBp300 kbVBp400 kbVBp500 kbVBp600 kbGrpVB kbDSupport |
Last Reviewed: August 10, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |