{{fbdoc item="title" value="RANDOMIZE"}}----
Seeds the random number generator

{{fbdoc item="syntax"}}##
	[[KeyPgDeclare|declare]] [[KeyPgSub|sub]] **Randomize** ( [[KeyPgByval|byval]] //seed// [[KeyPgAs|as]] [[KeyPgDouble|double]] = -1.0, [[KeyPgByval|byval]] //algorithm// [[KeyPgAs|as]] [[KeyPgLong|long]] = 0 )
##
{{fbdoc item="usage"}}##
	**Randomize** [ //seed// ][, //algorithm// ]
##
{{fbdoc item="param"}}
	##//seed//##
		A ##[[KeyPgDouble|double]]## seed value for the random number generator, but the fractional part is clipped for all algorithms except algorithm #4 (see below). If omitted, a value based on ##[[KeyPgTimer|Timer]]## will be used instead.
	##//algorithm//##
		An integer value to select the algorithm (see the standard header "fbprng.bi" for available algorithms). If omitted, the default algorithm for the current [[CompilerDialects|language dialect]] is used.

{{fbdoc item="desc"}}
	Sets the random seed that helps ##[[KeyPgRnd|Rnd]]## generate random numbers, and selects the algorithm to use.
	The constants for ##//algorithm//## are defined in ##fbprng.bi##. In the //[[CompilerOptlang|-lang fb]]// dialect, these constants are part of the ##FB## ##[[KeyPgNamespace|Namespace]]##.
	Valid values for ##//algorithm//## are:
		##FB_RND_AUTO (0)## - Default for current [[CompilerDialects|language dialect]]. This is algorithm ##FB_RND_MTWIST (3)## in the //[[CompilerOptlang|-lang fb]]// dialect, ##FB_RND_QB (4)## in the //[[CompilerOptlang|-lang qb]]// dialect and ##FB_RND_CRT (1)## in the //[[CompilerOptlang|-lang fblite]]// dialect.
		##FB_RND_CRT (1)## - Uses the C runtime library's ##rand()## function. This will give different results depending on the platform.
		##FB_RND_FAST (2)## - Uses a fast implementation. This should be stable across all platforms, and provides 32-bit granularity, reasonable degree of randomness.
		##FB_RND_MTWIST (3)## - Uses the Mersenne Twister. This should be stable across all platforms, provides 32-bit granularity, and gives a high degree of randomness.
		##FB_RND_QB (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.
		##FB_RND_REAL (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 ##FB_RND_MTWIST (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: for all algorithms except algorithm #4, because the fractional part of the seed is clipped, the 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, or even possibly worse by inducing sequence overlapping. 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.
		
		**Note:**
				##**Randomize**## is thread-safe (by using an internal mutex), but not thread specific.
				Unfinished structures for other random number generators are also available in the standard header "fbprng.bi".

{{fbdoc item="ex"}}
	{{fbdoc item="filename" value="examples/manual/math/randomize.bas"}}%%(freebasic)
'' 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
next
	%%
{{fbdoc item="ver"}}
	- Before fbc 1.10.0 (for fbc 1.08.0 and fbc 1.09.0), "fbprng.bi" was named "fbmath.bi".
	- Before fbc 1.08.0:
		The standard "fbmath.bi" header for available algorithms did not exist.
		##**Randomize**## was not thread-safe.

{{fbdoc item="lang"}}
	The default algorithm used depends on the current dialect in use:
		- With the //[[CompilerOptlang|-lang fb]]// dialect, a 32 bit Mersenne Twister function with a granularity of 32 bits is used.
		- With the //[[CompilerOptlang|-lang qb]]// dialect, a function giving the same output as ##[[KeyPgRnd|Rnd]]## in QB is used. The granularity is 24 bits.
		- With the //[[CompilerOptlang|-lang deprecated]]// and //[[CompilerOptlang|-lang fblite]]// dialects, the function in the C runtime available in the system is used. The function has a granularity of 15 bits in ""Win32"", and 32 bits in Linux and DOS.

{{fbdoc item="diff"}}
	- The ##//algorithm//## parameter is new to ""FreeBASIC"".
	- QBASIC only had one algorithm (replicated in FB in algorithm number ##**4**##, and set as the default in the //[[CompilerOptlang|-lang qb]]// dialect).

{{fbdoc item="see"}}
	- ##[[KeyPgRnd|Rnd]]##
	- [[CompilerDialects|Language dialects]]

{{fbdoc item="back" value="CatPgMath|Mathematical Functions"}}