Random Class
Assembly: mscorlib (in mscorlib.dll)
'Declaration <SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public Class Random 'Usage Dim instance As Random
/** @attribute SerializableAttribute() */ /** @attribute ComVisibleAttribute(true) */ public class Random
SerializableAttribute ComVisibleAttribute(true) public class Random
Not applicable.
Pseudo-random numbers are chosen with equal probability from a finite set of numbers. The chosen numbers are not completely random because a definite mathematical algorithm is used to select them, but they are sufficiently random for practical purposes. The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.
The random number generation starts from a seed value. If the same seed is used repeatedly, the same series of numbers is generated. One way to produce different sequences is to make the seed value time-dependent, thereby producing a different series with each new instance of Random. By default, the parameterless constructor of the Random class uses the system clock to generate its seed value, while its parameterized constructor can take an Int32 value based on the number of ticks in the current time.
However, because the clock has finite resolution, creating different Random objects in close succession creates random number generators that produce identical sequences of random numbers. This problem can be avoided by creating a single Random object rather than multiple ones.
To improve performance, create one Random to generate many random numbers over time, instead of repeatedly creating a new Random to generate one random number.
To generate a cryptographically secure random number suitable for creating a random password, for example, use a class derived from System.Security.Cryptography.RandomNumberGenerator such as System.Security.Cryptography.RNGCryptoServiceProvider.
Notes to Inheritors: In the .NET Framework versions 1.0 and 1.1, a minimum implementation of a class derived from Random required overriding the Sample method to define a new or modified algorithm for generating random numbers. The derived class could then rely on the base class implementation of the Random.Next, Random.Next(Int32), Random.Next(Int32,Int32), NextBytes, and NextDouble methods to call the derived class implementation of the Sample method. In the .NET Framework version 2.0 and later, the behavior of the Random.Next, Random.Next(Int32,Int32), and NextBytes methods have changed so that these methods do not necessarily call the derived class implementation of the Sample method. As a result, classes derived from Random that target the .NET Framework 2.0 and later should also override these three methods.The following code example creates Random objects with different overloads of the class constructor and generates sequences of random integers and doubles from the objects.
' Example of the Random class constructors and Random.NextDouble( ) ' method. Imports System.Threading Module RandomObjectDemo ' Generate random numbers from the specified Random object. Sub RunIntNDoubleRandoms( randObj As Random ) ' Generate the first six random integers. Dim j As Integer For j = 0 To 5 Console.Write( " {0,10} ", randObj.Next( ) ) Next j Console.WriteLine( ) ' Generate the first six random doubles. For j = 0 To 5 Console.Write( " {0:F8} ", randObj.NextDouble( ) ) Next j Console.WriteLine( ) End Sub ' Create a Random object with the specified seed. Sub FixedSeedRandoms( seed As Integer ) Console.WriteLine( vbCrLf & _ "Random numbers from a Random object with " & _ "seed = {0}:", seed ) Dim fixRand As New Random( seed ) RunIntNDoubleRandoms( fixRand ) End Sub ' Create a random object with a timer-generated seed. Sub AutoSeedRandoms( ) ' Wait to allow the timer to advance. Thread.Sleep( 1 ) Console.WriteLine( vbCrLf & _ "Random numbers from a Random object " & _ "with an auto-generated seed:" ) Dim autoRand As New Random( ) RunIntNDoubleRandoms( autoRand ) End Sub Sub Main( ) Console.WriteLine( _ "This example of the Random class constructors " & _ "and Random.NextDouble( ) " & vbCrLf & _ "generates the following output." & vbCrLf ) Console.WriteLine( "Create Random " & _ "objects, and then generate and display six " & _ "integers and " & vbCrLf & "six doubles from each." ) FixedSeedRandoms( 123 ) FixedSeedRandoms( 123 ) FixedSeedRandoms( 456 ) FixedSeedRandoms( 456 ) AutoSeedRandoms( ) AutoSeedRandoms( ) AutoSeedRandoms( ) End Sub End Module ' This example of the Random class constructors and Random.NextDouble( ) ' generates the following output. ' ' Create Random objects, and then generate and display six integers and ' six doubles from each. ' ' Random numbers from a Random object with seed = 123: ' 2114319875 1949518561 1596751841 1742987178 1586516133 103755708 ' 0.01700087 0.14935942 0.19470390 0.63008947 0.90976122 0.49519146 ' ' Random numbers from a Random object with seed = 123: ' 2114319875 1949518561 1596751841 1742987178 1586516133 103755708 ' 0.01700087 0.14935942 0.19470390 0.63008947 0.90976122 0.49519146 ' ' Random numbers from a Random object with seed = 456: ' 2044805024 1323311594 1087799997 1907260840 179380355 120870348 ' 0.21988117 0.21026556 0.39236514 0.42420498 0.24102703 0.47310170 ' ' Random numbers from a Random object with seed = 456: ' 2044805024 1323311594 1087799997 1907260840 179380355 120870348 ' 0.21988117 0.21026556 0.39236514 0.42420498 0.24102703 0.47310170 ' ' Random numbers from a Random object with an auto-generated seed: ' 1920831619 1346865774 2006582766 1968819760 332463652 110770792 ' 0.71326689 0.50383335 0.50446082 0.66312569 0.94517193 0.58059287 ' ' Random numbers from a Random object with an auto-generated seed: ' 254927927 1205531663 1984850027 110020849 1438111494 1697714106 ' 0.19383387 0.52067738 0.74162783 0.35063667 0.31247720 0.38773733 ' ' Random numbers from a Random object with an auto-generated seed: ' 736507882 1064197552 1963117288 398705585 396275689 1137173773 ' 0.67440084 0.53752140 0.97879483 0.03814764 0.67978248 0.19488178
Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.