Revision [17534]

This is an old revision of KeyPgRandomize made by DkLwikki on 2015-04-01 12:36:19.



Seeds the random number generator

Randomize [ seed ][, algorithm ]

A KeyPgDouble double seed value for the random number generator. If omitted, a value based on KeyPgTimer Timer will be used instead.
An integer value to select the algorithm. If omitted, the default algorithm for the current CompilerDialects language dialect is used.

Sets the random seed that helps KeyPgRnd Rnd generate random numbers, and selects the algorithm to use. Valid values for algorithm are:
0 - Default for current CompilerDialects language dialect. This is algorithm 3 in the CompilerOptlang -lang fb dialect, 4 in the CompilerOptlang -lang qb dialect and 1 in the CompilerOptlang -lang fblite dialect.
1 - Uses the C runtime library's rand() function. This will give different results depending on the platform.
2 - Uses a fast implementation. This should be stable across all platforms, and provides 32-bit granularity, reasonable degree of randomness.
3 - Uses the Mersenne Twister. This should be stable across all platforms, provides 32-bit granularity, and gives a high degree of randomness.
4 - Uses a function that is designed to give the same random number sequences as QBASIC. This should be stable across all platforms, and provides 24-bit precision, with a low degree of randomness.
5 - Available on Win32 and Linux, using system features (Win32 Crypto API, Linux /dev/urandom) to provide cryptographically random numbers. If those system APIs are unavailable, algorithm 3 will be used instead.

For any given seed, each algorithm will produce a specific, deterministic sequence of numbers for that seed. If you want each call to Randomize to produce a different sequence of numbers, a seed that is not quite predictable should be used - for example, the value returned from KeyPgTimer Timer. Omitting the seed parameter will use a value based on this.
Note: using the KeyPgTimer Timer value directly as a parameter will produce the same seed if used more than once in the same second. However, it is generally not worth calling Randomize twice with unpredictable seeds anyway, because the second sequence will be no more random than the first. In most cases, the Mersenne twister should provide a sufficiently random sequence of numbers, without requiring reseeding between KeyPgRnd Rnd calls.

When you call Randomize with the QB compatible algorithm, part of the old seed is retained. This means that if you call Randomize several times with the same seed, you will not get the same sequence each time. To get a specific sequence in QB compatible mode, set the seed by calling KeyPgRnd Rnd with a negative parameter.

'' Seed the RNG to the method using C's rand()
Randomize , 1

'' Print a sequence of random numbers
For i As Integer = 1 To 10
    Print Rnd

Dialect Differences:
The default algorithm used depends on the current dialect in use:

Differences from QB:
See also:
Back to Mathematical Functions
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki phatcode